标签:
***题意:n个学生,p门课,求最大匹配,即p门课是否都有人上***
匈牙利算法
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<queue> #include<vector> #include<algorithm> using namespace std; typedef long long LL; #define N 303 #define INF 0x3f3f3f int G[N][N], vis[N], used[N]; int n, p, x; bool Hungary(int u) { for(int i=1; i<=p; i++) { if(!vis[i]&&G[u][i]) { vis[i]=1; if(!used[i] || Hungary(used[i])) { used[i]=u; return true; } } } return false; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%d%d", &p, &n); int num; memset(G, 0, sizeof(G)); memset(used, 0, sizeof(used)); for(int i=1; i<=p; i++) { scanf("%d", &num); for(int j=1; j<=num; j++) { scanf("%d", &x); G[x][i]=1; } } int ans=0; for(int i=1; i<=n; i++) { memset(vis, 0, sizeof(vis)); if(Hungary(i)) ans++; } if(ans==p) printf("YES\n"); else printf("NO\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/9968jie/p/5741428.html