和1150基本一样,也是最小覆盖点=最大匹配个数
唉,再次感叹弱菜。。。。。
题意我都没懂。。。我的天。。直接看样例做的。。。。
代码:
#include<iostream> #include<cstring> using namespace std; int map[200][200]; int tmp[200]; int flag[200]; int n,m; int DFS(int x) { for(int i=1;i<=n;i++) { if(!flag[i]&&map[x][i]) { flag[i]=1; if(!tmp[i]||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)); memset(tmp,0,sizeof(tmp)); sum=0; for(int i=1;i<=m;i++) { cin>>x>>y; map[x][y]=1; } for(int i=1;i<=n;i++) { memset(flag,0,sizeof(flag)); if(DFS(i)) sum++; } cout<<n-sum<<endl; } return 0; }