最小覆盖,用n-最小覆盖书,我对匈牙利有个深一点的了解,一开始我还想了半天
#include<iostream>
using namespace std;
int n;
int map[150][150],pa[150],vis[150],sign[150];
int find(int x)
{
for(int i=1;i<=n;i++)
{
if(map[x][i]&&!vis[i])
{
vis[i]=1;
if(pa[i]==-1||find(pa[i]))
{
pa[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int te,p,x,y;
while(cin>>te)
{
while(te--)
{
for(int i=0;i<150;i++)
{
for(int j=0;j<150;j++)
map[i][j]=0;
pa[i]=-1;
}
scanf("%d%d",&n,&p);
while(p--)
{
scanf("%d%d",&x,&y);
map[x][y]=1;
}
int cou=0;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(find(i))
cou++;
}
cout<<n-cou<<endl;
}
}
return 0;
}