hdu 1083 匈牙利算法模板题
Posted LMissher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 1083 匈牙利算法模板题相关的知识,希望对你有一定的参考价值。
题意:有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;
}
以上是关于hdu 1083 匈牙利算法模板题的主要内容,如果未能解决你的问题,请参考以下文章