解题思路:比较裸的一道题,直接跑匈牙利就行了,但是要注意一点,这个兔崽子是在闯关,一道题回答不出来就没了,直接在题目循环那里加一个else break;就行了!!!;
#include<iostream> #include<algorithm> #include<cstring> #define maxn 2005 using namespace std; int n; int m; int x,y; int e[maxn][maxn]; int visit[maxn]; int match[maxn]; int dfs(int u) { for(int i=0;i<n;i++) { if(!visit[i]&&e[u][i]) { visit[i]=1; if(match[i]==-1||dfs(match[i])) { match[i]=u;match[u]=i; return 1; } } } return 0; } int main() { cin>>n>>m; memset(e,0,sizeof(e)); memset(match,-1,sizeof(match)); for(int i=n;i<n+m;i++) { cin>>x>>y; e[i][x]=e[x][i]=1; e[i][y]=e[y][i]=1; } int ans=0; for(int i=n;i<n+m;i++) { memset(visit,0,sizeof(visit)); if(dfs(i)) ans++; else break; } cout<<ans<<endl; return 0; }