题意:
思路
#include <cstdio> #include <vector> #include <cstring> #include <iostream> using namespace std; const int N = 1e4 + 10; const int M = 1e6 + 10; vector<int> G[N]; int n,now; bool match[M]; int used[M]; bool Hungary(int u){ for(int i = 0;i < G[u].size();i++){ int v = G[u][i]; if(used[v] != now){ used[v] = now; if(!match[v] || Hungary(match[v])){ match[v] = u; return 1; } } } return 0; } int main(){ scanf("%d",&n); for(int i = 1,u,v;i <= n;i++){ scanf("%d%d",&u,&v); G[u].push_back(i),G[v].push_back(i); } int ans = 0; for(int i = 1;i <= n;i++){ now = i; if(Hungary(i)) ans++; else break; } printf("%d\n",ans); return 0; }