hdu 1083 Courses

来源:互联网 发布:java path设置方法技巧 编辑:程序博客网 时间:2024/05/29 11:15

描述:有p门的课,每门课都有若干学生,现在要为每个课程分配一名课代表,每个学生只能担任一门课的课代表,如果每个课都能找到课代表,则输出"YES",否则"NO"。

二分匹配

#include<iostream>#include<cstring>#define maxn 305using namespace std;int c,s;int rem[maxn][maxn];int visit[maxn],map[maxn];int dfs(int x){for(int i=1;i<=s;i++){if(rem[x][i]&&!visit[i]){visit[i]=1;if(!map[i]||dfs(map[i])){map[i]=x;return 1;}}}return 0;} int main(){int t;cin>>t;while(t--){memset(rem,0,sizeof(rem));memset(map,0,sizeof(map));cin>>c>>s;for(int i=1;i<=c;i++){int x,y;cin>>x;while(x--){cin>>y;rem[i][y]=1;}}int sum=0;for(int i=1;i<=c;i++){memset(visit,0,sizeof(visit));if(dfs(i)) sum++;}if(sum==c) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;}


0 0
原创粉丝点击