题目地址:http://poj.org/problem?id=1422
这题纯裸的最小路径覆盖题,题意表现的太明显了。。。不多说。。最小路径覆盖==顶点数-最大匹配数
#include #include #include #include #include #include #include #include #include using namespace std; int n, mp[200][200], vis[200], link[200]; int dfs(int a) { int i; for(i=1;i<=n;i++) { if(!vis[i]&&mp[a][i]) { vis[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=a; return 1; } } } return 0; } void hungary() { int i, ans=0; memset(link,-1,sizeof(link)); for(i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n",n-ans); } int main() { int m, t, i, j, x, y; scanf("%d",&t); while(t--) { memset(mp,0,sizeof(mp)); scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&x,&y); mp[x][y]=1; } hungary(); } return 0; }