Air Raid
一道简单题不想做过多的解释。
#include <stdio.h>
#include <string.h>
#define CL(x,v);memset(x,v,sizeof(x));
const int MAX = 120 + 10;
int n,link[MAX];
bool graph[MAX][MAX],used[MAX];
int Find(int u)
{
for(int v = 1;v <= n;v++)
if(!used[u]&&graph[u][v])
{
used[u] = 1;
if(link[v]==-1||Find(link[v]))
{
link[v] = u;
return 1;
}
}
return 0;
}
int KM()
{
int res = 0;
CL(link,-1);
for(int u = 1;u <= n;u++)
{
CL(used,0);
res += Find(u);
}
return res;
}
int main()
{
int T,i,m,a,b;
scanf("%d",&T);
while(T--)
{
CL(graph,0);
scanf("%d%d",&n,&m);
for(i = 0;i < m;i++)
{
scanf("%d%d",&a,&b);
graph[a][b] = 1;
}
printf("%d\n",n-KM());
}
return 0;
}