有向无环图的最小路径覆盖=图的点数-图的最大匹配数
#include<cstdio>
#include<cstring>
#include<ctime>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N=2e2+5;
int vis[N],match[N];
int n;
int _map[N][N];
bool dfs(int u)
{
for(int i=1;i<=n;i++)if(!vis[i]&&_map[u][i])
{
vis[i]=1;
if(match[i]==-1||dfs(match[i]))
{
match[i]=u;
return true;
}
}
return false;
}
int main()
{
//freopen("a.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(_map,0,sizeof(_map));
int m;
scanf("%d%d",&n,&m);
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
_map[u][v]=1;
}
memset(match,-1,sizeof(match));
int ans=0;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))ans++;
}
printf("%d\n",n-ans);
}
return 0;
}