HDU 1083 网络流之二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=1083
二分图匹配用得很多
这道题只需要简化的二分匹配
#include<iostream> #include<cstdio> #include<cstring> #define maxm 410 using namespace std; int p,n; int master[maxm]; int linking[maxm][maxm]; int has[maxm]; int solve(int x)//x课 { int i; for(i=1;i<=n;i++) { if(linking[x][i]&&!has[i]) { has[i]=1; if(!master[i]||solve(master[i])) { master[i]=x; return 1; } } } return 0; } int main() { int m,sum=0; scanf("%d",&m); while(m--) { scanf("%d%d",&p,&n); memset(master,0,sizeof(master)); memset(linking,0,sizeof(linking)); for(int i=1;i<=p;i++) { int course; int student; scanf("%d",&course); for(int j=1;j<=course;j++) { scanf("%d",&student); linking[i][student]=1; } } for(int donser=1;donser<=p;donser++) { memset(has,0,sizeof(has)); if(solve(donser)) sum++; } if(sum==p) printf("YES\n"); else printf("NO\n"); sum=0; } return 0; }