Cod sursa(job #2694403)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 9 ianuarie 2021 10:00:40
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <bitset>

using namespace std;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

int n, m, e;

const int N = 10041;
vector<int> gra[N];

int rt[N], lt[N];

int ans = 0;

bitset<N> vi;
bool baga(int a){
	if(vi[a])return false;
	vi[a] = true;
	for(auto b : gra[a]){
		if(lt[b] == 0){
			rt[a] = b;
			lt[b] = a;
			return true;
		}
	}
	for(auto b : gra[a]){
		if(baga(lt[b])){
			rt[a] = b;
			lt[b] = a;
			return true;
		}
	}
	return false;
}

int main(){
	// ios_base::sync_with_stdio(false);
	
	fin >> n >> m >> e;
	for(int i = 0; i < e; ++i){
		int a, b;
		fin >> a >> b;
		gra[a].push_back(b);
	}
	
	for(int a = 1; a <= n; ++a){
		vi.reset();
		ans += int(baga(a));
	}
	
	fout << ans << "\n";
	for(int i = 1; i <= n; ++i){
		if(rt[i] == 0)continue;
		fout << i << " " << rt[i] << "\n";
	}
	
	return 0;
}