求调最后一个hack(二分图)时间应该是m为啥是nm?
查看原帖
求调最后一个hack(二分图)时间应该是m为啥是nm?
1372776
Gmj2020楼主2024/10/24 19:45
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=4e6+15,M=1e4+5;


int idx,h[N],ne[N],e[N];
void add(int a,int b){
	e[++idx]=b;
	ne[idx]=h[a];
	h[a]=idx;
}
int ans;
int match[N];
bool find(int x){
	for(int i=h[x];i;i=ne[i]){
		h[x]=ne[i];
		int j=e[i];
		if(!match[j]||find(match[j])){
			match[j]=x;
			return true;
		}
	}
	return false;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,y;cin>>x>>y;
		add(x,i+M);
		add(i+M,x);
		add(y,i+M);
		add(i+M,y);
	}

	for(int i=1;i<=10000;i++){
		if(!find(i))break;
		ans=i;
	}
	cout<<ans;
	return 0;
}

每个边访问一次啊

2024/10/24 19:45
加载中...