Cod sursa(job #2462049)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 26 septembrie 2019 18:17:23
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

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

const int MAXN = 200001;
int L[MAXN],R[MAXN],n,m,viz[MAXN],e,x,y;

vector < int > G[MAXN];
bool cuplaj(int x) {
	
	if ( viz[x] )
		return false;
	viz[x] = true;
	for ( auto y : G[x])
		if ( !R[y] or cuplaj(R[y])) {
			R[y] = x;
			L[x] = y;
			return true;
		} 
	return false;
}

int main() {
		
	fin >> n >> m >> e;
	for ( ; e > 0; --e) {
		
		fin >> x >> y;
		G[x].push_back(y + n);
	}
	int  cnt = 0;
	bool ok = true;
	while( ok == true) {
	ok = false;
	memset(viz,0,sizeof(viz));
	for ( int i = 1; i <= n; ++i)
		if ( !L[i] and cuplaj(i) ) {
			
			++cnt;
			ok = true;
		}
	
	}
		fout << cnt << "\n";
	for ( int i = 1; i <= n; ++i)
	if ( L[i])
		fout << i << " " << L[i]-n << "\n";
}