给你一个有向无圈图,伞兵可以沿着路一直走,问最少需要多少伞兵才能把路全走完,就是求最小边覆盖=点数-选定的边。而选定的边就是把有向图拆点之后的最大匹配。。。
果然匈牙利建图是最蛋疼的,然后就是模板了
#include<stdio.h>
#include<string.h>
int mp[210][210],d[210],used[210];
int m,n;
int f(int x)
{
for(int i=1;i<=n;i++)
{
if(mp[x][i]==1&&!used[i])
{
used[i]=1;
if(d[i]==0||(f(d[i])))
{
d[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int T,a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(mp,0,sizeof(mp));
memset(d,0,sizeof(d));
while(m--)
{
scanf("%d%d",&a,&b);
mp[a][b]=1;
}
int ans=0;
for(int i=1;i<=n;i++)
{
memset(used,0,sizeof(used));
if(f(i)) ans++;
}
printf("%d\n",n-ans);
}
return 0;
}