跟1466如出一辙,求独立集即可
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<vector> using namespace std; const int maxn=201; vector<int> e[maxn]; int n,m,p[maxn]; bool vis[maxn]; bool DFS(int u) { for(int i=0;i<e[u].size();i++) if(!vis[e[u][i]]) { vis[e[u][i]]=1; if(p[e[u][i]]==-1||DFS(p[e[u][i]])) { p[e[u][i]]=u; return 1; } } return 0; } void hungary() { int ans=0; for(int i=0;i<=n;i++) { memset(vis,0,sizeof(vis)); if(DFS(i)) ans++; } printf("%d\n",n-ans); } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) e[i].clear(); memset(p,-1,sizeof(p)); for(int i=0;i<m;i++) { int ita,itb; scanf("%d%d",&ita,&itb); e[ita].push_back(itb); } hungary(); } return 0; }