二分图匹配 匈牙利 WA63pts
查看原帖
二分图匹配 匈牙利 WA63pts
536439
YONIC楼主2022/5/25 11:00
#include<bits/stdc++.h>
#define N (int)(1e6+3)
using namespace std;
int n,m,ans,match[N];
bool vis[N];
vector<int>G[N];
bool connect(int x){
    for(int i=0;i<G[x].size();++i){
        int y=G[x][i];
        if(!vis[y]){
            vis[y]=1;
            if(!match[y]||connect(match[y])){
                match[y]=x;
                return 1;
            }
        }
    }
    return 0;
}
int main(){
    scanf("%d%d",&n,&m);
	int u=0,v=0;
	while(u>=0){
		scanf("%d%d",&u,&v);
		G[u].push_back(v);
	}
    for(int i=1;i<=n;++i) if(connect(i)) ++ans;
    printf("%d\n",ans);
    for(int i=n+1;i<=m;++i) if(match[i]) printf("%d %d\n",match[i],i);
    return 0;
}
2022/5/25 11:00
加载中...