二分图最大匹配-匈牙利算法

时间复杂度O(nm)

vector<int>e[maxn];
int match[maxn];
int ans;
int vis[maxn];
set<pii>st;
bool dfs(int u){
	
	for(int v:e[u]){
		if(vis[v])continue;
		vis[v]=1;
		if(!match[v]||dfs(match[v])){
			match[v]=u;
			return true;
		}
	}
	return false;
	
}
void solve(){
	int n,m,ed;cin>>n>>m>>ed;
	for(int i=1;i<=ed;i++){
		int u,v;cin>>u>>v;
		if(st.count({u,v}))continue;
		e[u].pb(v);st.insert({u,v});
	}
	
	for(int i=1;i<=n;i++){
		memset(vis,0,sizeof(vis));
		if(dfs(i))ans++;
	}
	cout<<ans<<endl;
}
posted @ 2025-03-16 17:42  Marinaco  阅读(16)  评论(0)    收藏  举报
//雪花飘落效果