二分图最大匹配

#include<bits/stdc++.h>
#define int long long 
#define rep(i,x,y) for(int i=x;i<=y;i++) 

using namespace std;
vector<int>G[514154];
int n,m,e;
int ans;
int vistime[1145141];
int mch[1145141];
bool dfs(const int u, const int tag) {
  if (vistime[u] == tag) return false;
  vistime[u] = tag;
  for(int i=0;i<G[u].size();i++){
  	int v=G[u][i];
	  if ((mch[v] == 0) || dfs(mch[v], tag)) {
	    mch[v] = u;
	    return true;
	  }
  }
  return false;
}
signed main() {
	cin>>n>>m>>e;
	rep(i,1,e) {
		int u,v;
		cin>>u>>v;
		G[u].push_back(v);
	}
	rep(i,1,n) {
		if(dfs(i,i)) {
			ans++; 
		}
	}
	cout<<ans;
	return 0;
}
posted @ 2025-03-21 17:40  houpingze  阅读(11)  评论(0)    收藏  举报