#include <stdio.h> #include <string.h> int g[510][510]; int linker[510]; int used[510]; int n,k,cnt; int DFS( int u ) { int v; for( v = 1; v <= n; v++ ) { if( g[u][v] && !used[v] ) { used[v] = 1; if( linker[v] == -1 ||DFS(linker[v]) ) { linker[v] = u; return 1; } } } return 0; } int main() { int x,y; while( ~scanf("%d %d",&n,&k) ) { memset(g,0,sizeof(g)); for( int i = 0; i < k; i++ ) { scanf("%d %d",&x,&y); g[x][y] = 1; } memset(linker,-1,sizeof(linker)); for( int i = 1; i <= n; i++ ) { memset(used,0,sizeof(used)); if( DFS(i) ) cnt++; } printf("%d\n",cnt); } return 0; }
二分图模板
最新推荐文章于 2024-07-24 03:35:44 发布