#include<cstdio> #include<cstring> using namespace std; bool map[505][505]; int n, k; bool vis[505]; int linker[505]; void sscanf() { int x, y; scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { scanf("%d%d",&x,&y); map[x][y] = true; } } bool dfs(int u) { for(int i=1;i<=n;i++) { if(map[u][i] && !vis[i]) { vis[i] = true; if(linker[i]==-1 || dfs(linker[i])) { linker[i] = u; return true; } } } return false; } int find() { int res = 0; memset(linker,-1,sizeof(linker)); for(int i=1; i<=n; i++) { memset(vis,false,sizeof(vis)); if(dfs(i)) res++; } return res; } int main() { int Case; scanf("%d",&Case); while(Case--) { sscanf(); printf("%d ",find()); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。