标签:代码 学生 输出 bsp can bool 个学生 set gre
题意:有p个课程,n个学生,每个课程有x个学生喜欢。如果每个课程都至少可以分配一个学生就输出YES,否则输出NO。
题解:匈牙利算法裸题。
代码:
#include <cstdio>
#include <cstring>
#define N 400
int Map[N][N],S[N],vis[N],n;
bool dfs(int u){
for(int i=1;i<=n;i++){
if(Map[u][i]&&!vis[i]){
vis[i]=1;
if(S[i]==-1||dfs(S[i])){
S[i]=u;
return true;
}
}
}
return false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int p;
memset(Map,0,sizeof(Map));
scanf("%d%d",&p,&n);
for(int i=1;i<=p;i++){
int x,y;
scanf("%d",&x);
for(int j=0;j<x;j++){
scanf("%d",&y);
Map[i][y]=1;
}
}
memset(S,-1,sizeof(S));
int res=0;
for(int i=1;i<=p;i++){
memset(vis,0,sizeof(vis));
if(dfs(i)) res++;
}
if(res==p) printf("YES\n");
else printf("NO\n");
}
return 0;
}
标签:代码 学生 输出 bsp can bool 个学生 set gre
原文地址:http://www.cnblogs.com/LMissher/p/7399333.html