西安多校集训-二分图

二分图

二分图专业点说是讲一张图的点分为两个点集,使每个点集内没有连边。
通俗点说就是,只有异性恋的相亲?

二分图最大匹配

其实就是暴力吧,如果后面的能接上前面的,让前面的让开,再让前面的去接后面的。

#include<iostream>
#include<vector>
using namespace std;
const int N=5e4+50;
int from[N],vis[N];
int n,m,e;
vector<int> vec[510];
bool dfs(int i,int tim){
	if(vis[i]==tim) return 0;
	vis[i]=tim;
	for(auto j:vec[i]){
		if(from[j]==0 || dfs(from[j],tim)){
			from[j]=i;
			return 1;
		}
	}
	return 0;
}
int ans=0;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>e;
	for(int i=1;i<=e;i++){
		int u,v;
		cin>>u>>v;
		vec[u].push_back(v);
	}
	for(int i=1;i<=n;i++){
		if(dfs(i,i)){
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

更高级的我也不会了啊,求教。

posted @ 2025-03-31 21:10  Tighnari  阅读(10)  评论(0)    收藏  举报