洛谷 P2071:座位安排 ← 二分图 + 匈牙利算法 + 二分图最大匹配
【题目来源】
【题目描述】
已知车上有 N 排座位,有 2N 个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置。
【输入格式】
第一行,一个正整数 N。
第二行至第 2N+1 行,每行两个正整数 S_{i,1},S_{i,2},为每个人想坐的排数。
【输出格式】
一个非负整数,为最多使得多少人满意。
【输入样例】
4
1 2
1 3
1 2
1 3
1 3
2 4
1 3
2 3
【输出样例】
7
【数据范围】
对于 10% 的数据,n≤10;
对于 30% 的数据,n≤50;
对于 60% 的数据,n≤200;
对于 100% 的数据,n≤2000。
【算法分析】
● 二分图的概念:如果无向图 G=(V, E) 的所有点可以分为两个集合 V1,V2,所有边都在 V1 与 V2 之间,且 V1,V2 的内部都没有边,则称 G 是一个二分图。
● 匈牙利算法:
● 题设每个人想坐的排数有两个,但每排有两个座位,故每个人有四个座位的选择。若设第 i 个人想坐的排数为 u 及 v,依据上述分析,在二分图中可构建 (i,u)、(i,u+n)、(i,v)、(i,v+n)等四条边。
● 注意代码中 N 及 M 的大小设置。
【算法代码】
本题代码大部分与“”相同。详见:
【参考文献】

浙公网安备 33010602011771号