问,此题为什么不能用匈牙利算法做二分图匹配
查看原帖
问,此题为什么不能用匈牙利算法做二分图匹配
378403
wanglexi31楼主2025/1/31 21:29

rt,为什么会只过 #1 和 #12

#include<bits/stdc++.h>
#define ll long long 
#define pb emplace_back
#define pii pair<int,int>
#define fir first
#define sec second
#define mod (998244353ll)
#define inf (1000000000ll)
using namespace std;
int n,m,cnt;
vector<int>v[155],e[155];
int frd[155];
bool vis[155];
bool dfs(int x){
	if(vis[x])return 0;
	vis[x]=1;
	for(auto y:v[x]){
		if(!frd[y]||dfs(frd[y])){
			frd[y]=x;
			return 1;
		}
	}
	return 0;
}
void dfss(int x){
	if(vis[x])return;
	vis[x]=1;
	cout<<x<<" ";
	for(auto y:e[x])
		dfss(y);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;cin>>x>>y;
		v[x].pb(y);
	}
	for(int i=1;i<=n;i++)dfs(i);
	memset(vis,0,sizeof vis);
	for(int i=1;i<=n;i++)
		if(frd[i]){
//			cout<<i<<"<->"<<frd[i]<<"\n";
			e[i].pb(frd[i]);
			e[frd[i]].pb(i);
			cnt++;
		}
	for(int i=1;i<=n;i++){
		if(!vis[i]&&e[i].size()==1)dfss(i),cout<<"\n";
	}
	cout<<n-cnt;
	return 0;
}

下载测试点,最后一行的答案都是错的

2025/1/31 21:29
加载中...