Cod sursa(job #2641476)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 11 august 2020 16:17:37
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

int n,m,e,a,b,cnt,L[10010],R[10010];
vector<int> v[10010];
bitset<10010> viz;

bool trai(int poz){
	if(viz[poz])return 0; 
	viz[poz]=1;
	for(auto it:v[poz])
		if(!R[it]){
			R[it]=poz;
			L[poz]=it;
			return 1;
		}
	for(auto it:v[poz])
		if(trai(R[it])){
			R[it]=poz;
			L[poz]=it;
			return 1;
		}
	return 0;
}

int main(){
	f>>n>>m>>e;
	for(int i=1;i<=e;i++){
		f>>a>>b;
		v[a].push_back(b);
	}
	bool ok=1;
	while(ok){
		ok=0;
		viz.reset();
		for(int i=1;i<=n;i++)
			if(!L[i]&&!viz[i])
				if(trai(i)){
					ok=1;cnt++;
				}
	}
	g<<cnt<<'\n';
	for(int i=1;i<=n;i++)
		if(L[i])
			g<<i<<' '<<L[i]<<'\n';
}