好吧,一晚上无限次的暴露自己是弱菜的级别。。。。
本来开开心心的套用二分匹配模板,结果因为没有弄清谁匹配谁弄混匹配次数而不能1A。怨念啊。。。。
注意注意注意,下次二分一定要注意!
代码:
#include<iostream> #include<cstring> using namespace std; #define MAXN 333 int map[MAXN][MAXN]; int tmp[MAXN]; bool flag[MAXN]; int n,m; int DFS(int x) { for(int i=1;i<=m;i++) //m学生 { if(map[x][i]&&!flag[i]) { flag[i]=true; if(tmp[i]==-1||DFS(tmp[i])) { tmp[i]=x; return 1; } } } return 0; } int main() { int k,T,x,sum,y; cin>>T; while(T--) { cin>>n>>m; memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) { cin>>k; while(k--) { cin>>y; map[i][y]=1; } } memset(tmp,-1,sizeof(tmp)); sum=0; for(int i=1;i<=n;i++) //n课程 { memset(flag,0,sizeof(flag)); if(DFS(i))sum++; } if(sum==n) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }