二分图最大匹配 增广路径法实现 pku 1469 COURSES
2010-08-23 22:43
357 查看
注释在代码里写的很清楚了
题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1469
上代码
题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1469
上代码
#include <stdio.h> #include <memory.h> //分别定义左右最大元素数量 #define Left_Max 101 #define Right_Max 301 //匹配标志!!!!!在DFS遍历中寻找增广路径的时候用,每次在寻找增广路径的时候都要刷新 bool visit[Right_Max]; //记录对应在左边集合中的元素!!!这个是不要的 int link[Right_Max]; //定义左右集合的连接,1_连接,0_未连接 int map[Left_Max][Right_Max]; int left_num,right_num; //对于增广路径还可以用一个递归的方法来描述。这个描述不一定最准确,但是它揭示了寻找增广路径的一 //般方法: //“从点A出发的增广路径”一定首先连向一个在原匹配中没有与点A配对的点B。如果点B在原匹配中没有与 //任何点配对,则它就是这条增广路径的终点;反之,如果点B已与点C配对,那么这条增广路径就是从A到B //,再从B到C,再加上“从点C出发的增广路径”。并且,这条从C出发的增广路径中不能与前半部分的增广 //路径有重复的点。 bool find_augment(int left){ for(int i = 1;i <= right_num;i++) //如果右边集合元素i未被访问并且left,i可以匹配 if(!visit[i] && map[left][i] != 0){ //标记i已经被匹配 visit[i] = true; //i在左边还未有标记或者是i在左边的配对元素能再找一个可以配对的构成增广路径 if(link[i] == 0 || find_augment(link[i])){ //link是记录整个过程中左右元素配对的 //而visit只是在这次的DFS中确定是否存在配对~~~ link[i] = left; return true; } } return false; } int main(){ int _case; scanf("%d",&_case); int P,N; int i; int count,c,s; while(_case--){ scanf("%d%d",&P,&N); left_num = P; right_num = N; memset(map,0,sizeof(map)); memset(link,0,sizeof(link)); for(c = 1;c <= P;c++){ scanf("%d",&count); for(i = 1;i <= count;i++){ scanf("%d",&s); map[c][s] = 1; } } int ans = 0; for(c = 1;c <= P;c++){ //一次寻找增广路径可能要遍历很多元素,所以都清空 memset(visit,0,sizeof(visit)); if(find_augment(c)) ans++; } if(ans == P) printf("YES/n"); else printf("NO/n"); } return 0; }
相关文章推荐
- 二分图最大匹配 增广路径法实现 pku 1469 COURSES
- 二分图最大匹配 增广路径法实现 pku 1469 COURSES
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- POJ1469[COURSES] 二分图最大匹配 匈牙利算法
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
- Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配
- POJ-1469-COURSES(二分图最大匹配)
- 【二分图最大匹配】【匈牙利算法】poj1469 COURSES && poj2446 Chessboard
- POJ 1469 二分图最大匹配 COURSES
- COURSES(poj1469,二分图最大匹配)
- POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
- [最小路径覆盖、二分图最大匹配]Pku3020--Antenna Placement
- POJ1469_COURSES(二分图最大匹配)
- POJ1469 COURSES 【二分图最大匹配·HK算法】
- POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
- 二分图最大匹配 最大增广路径 递归法
- POJ 1469 COURSES(二分图最大匹配)
- POJ1469——COURSES(二分图最大匹配模板)
- POJ-1469 COURSES(二分图最大匹配)
- 【POJ1469】Courses-二分图最大匹配