HDU 1151 Air Raid(最小路径覆盖)

来源:互联网 发布:成龙终身成就奖 知乎 编辑:程序博客网 时间:2024/05/21 14:02
最小路径覆盖=定点数 - 最大匹配数
#include<stdio.h>#include<string.h>#define N 1050int map[N][N],vis[N],match[N],m,n,k;int find(int u){int i,j;for(i=1;i<=n;i++){if(map[u][i]&&!vis[i]){vis[i]=1;if(match[i]==-1||find(match[i])){match[i]=u;return 1;}}}return 0;}int hungary(){int i,j,sum=0;for(i=1;i<=n;i++){memset(vis,0,sizeof(vis));if(find(i))sum++;}return sum;}int main(){int a,b,i,j,t;scanf("%d",&t);while(t--){memset(map,0,sizeof(map));memset(match,-1,sizeof(match));scanf("%d%d",&n,&m);for(i=0;i<m;i++){scanf("%d%d",&a,&b);map[a][b]=1;}printf("%d\n",n-hungary());}return 0;}


0 0