最大匹配终极水题
#include<bits/stdc++.h> using namespace std; #define MAXI 1005 int mp[MAXI][MAXI]; int used[MAXI]; int vis[MAXI]; int n,m; bool dfs(int x) { for(int j=1;j<=m;j++) { if(mp[x][j]&&!used[j]) { used[j]=1; if(!vis[j]||dfs(vis[j])) { vis[j]=x; return true; } } } return false; } int find1(void) { int ans=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { memset(used,0,sizeof(used)); if(dfs(i))ans++; } return ans; } int main() { int k; while(scanf("%d",&k),k) { scanf("%d%d",&n,&m); memset(mp,0,sizeof(mp)); int a,b; while(k--) { scanf("%d%d",&a,&b); mp[a][b]=1; } printf("%d ",find1()); } }