#include#include 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\n",find()); } return 0;}
版权声明:本文为博主原创文章,未经博主允许不得转载。