[HDOJ1083]Courses(二分图最大匹配,匈牙利算法)
2016-08-24 17:26
309 查看
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1083
题意:没咋仔细看,感觉是n个学生m个课程,学生只能选一门课,每门课只能有一个学生选。给一个图描述学生和课程的喜好关系,问学生能不能都选到课。
按照学生和课程直接建图,做最大匹配,结果如果和学生数相同则说明都可以选到课。
题意:没咋仔细看,感觉是n个学生m个课程,学生只能选一门课,每门课只能有一个学生选。给一个图描述学生和课程的喜好关系,问学生能不能都选到课。
按照学生和课程直接建图,做最大匹配,结果如果和学生数相同则说明都可以选到课。
/* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mind! ┛┗┛┗┛┃\○/ ┓┏┓┏┓┃ / ┛┗┛┗┛┃ノ) ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┃┃┃┃┃┃ ┻┻┻┻┻┻ */ #include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <climits> #include <complex> #include <fstream> #include <cassert> #include <cstdio> #include <bitset> #include <vector> #include <deque> #include <queue> #include <stack> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define fr first #define sc second #define cl clear #define BUG puts("here!!!") #define W(a) while(a--) #define pb(a) push_back(a) #define Rint(a) scanf("%d", &a) #define Rll(a) scanf("%I64d", &a) #define Rs(a) scanf("%s", a) #define Cin(a) cin >> a #define FRead() freopen("in", "r", stdin) #define FWrite() freopen("out", "w", stdout) #define Rep(i, len) for(int i = 0; i < (len); i++) #define For(i, a, len) for(int i = (a); i < (len); i++) #define Cls(a) memset((a), 0, sizeof(a)) #define Clr(a, x) memset((a), (x), sizeof(a)) #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) #define lrt rt << 1 #define rrt rt << 1 | 1 #define pi 3.14159265359 #define RT return #define lowbit(x) x & (-x) #define onecnt(x) __builtin_popcount(x) typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef pair<int, int> pii; typedef pair<string, int> psi; typedef pair<LL, LL> pll; typedef map<string, int> msi; typedef vector<int> vi; typedef vector<LL> vl; typedef vector<vl> vvl; typedef vector<bool> vb; const int maxn = 330; int nu, nv; int G[maxn][maxn]; int linker[maxn]; bool vis[maxn]; bool dfs(int u) { For(v, 1, nv+1) { if(G[u][v] && !vis[v]) { vis[v] = 1; if(linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return 1; } } } return 0; } int main(){ // FRead(); int T, k, v; Rint(T); W(T) { Cls(G); Rint(nu); Rint(nv); For(u, 1, nu+1) { Rint(k); W(k) { Rint(v); G[u][v] = 1; } } int ret = 0; Clr(linker, -1); For(u, 1, nu+1) { Cls(vis); if(dfs(u)) ret++; } if(ret == nu) puts("YES"); else puts("NO"); } RT 0; }
相关文章推荐
- HDU - 1083 : Courses(匈牙利算法,二分图最大匹配)
- HDU 1083 Courses(二分图最大匹配【匈牙利算法】)
- hdoj1083_Courses(二分图最大匹配)
- POJ 1469 COURSES (二分图最大匹配 匈牙利算法)
- HDOJ---1151 Air Raid[匈牙利算法:最小路径覆盖数=原图顶点数–二分图最大匹配数]
- POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
- 【二分图最大匹配】【匈牙利算法】poj1469 COURSES && poj2446 Chessboard
- [HDOJ4185]Oil Skimming(二分图最大匹配,匈牙利算法xKM算法)
- hdoj1083 Courses(二分图的最大匹配数)
- [HDOJ2819]Swap(二分图最大匹配, 匈牙利算法)
- HDOJ 2063 过山车【匈牙利算法求二分图最大匹配 DFS增广 BFS增广】
- [HDOJ2444]The Accomodation of Students(二分图染色判定,最大匹配,匈牙利算法)
- 二分图最大匹配【匈牙利算法】HDU-1083
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
- [HDOJ1281]棋盘游戏(二分图最大匹配,匈牙利算法)
- POJ1469[COURSES] 二分图最大匹配 匈牙利算法
- Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配
- HDOJ 2063 过山车 ——二分图最大匹配(以邻接矩阵,邻接表为数据结构的匈牙利算法)
- 杭电OJ 1083——courses(二分图的匹配问题!匈牙利算法解答)