您的位置:首页 > 其它

poj 1469

2016-04-27 19:13 197 查看
题目大意:

有p门课供n个学生可选择,每个学生想选0门课或1或1门以上的课,问是否可以满足此p门课有且只有1个学生选择。

**>o<

匈牙利算法模板题喽!!

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=300+10;
int cas;
int p,n;
int tot;
int mp[maxn][maxn];
int vis[maxn],ans[maxn];
bool dfs(int u){
for(int i=1;i<=n;i++){
if(!vis[i]&&mp[u][i]){
vis[i]=true;
if(ans[i]==-1||dfs(ans[i])){
ans[i]=u;
return true;
}
}
}
return false;
}
int main(){
scanf("%d",&cas);
while(cas--){
tot=0;
scanf("%d%d",&p,&n);
memset(ans,-1,sizeof(ans));
memset(mp,0,sizeof(mp));
for(int i=1,a,x;i<=p;i++){
scanf("%d",&a);
for(int j=1;j<=a;j++){
scanf("%d",&x);
mp[i][x]=1;
}
}
for(int i=1;i<=p;i++){
memset(vis,0,sizeof(vis));
if(dfs(i))
tot++;
}
if(tot==p)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: