Cod sursa(job #2419029)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 7 mai 2019 15:27:40
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <vector>
#include <bitset>
#define DIM 10010
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,i,it,x,y,sol,ok,l[DIM],r[DIM];
bitset<DIM> f;
vector<int> v[DIM];
int cupleaza(int nod) {
	if (f[nod]==1)
		return 0;
	f[nod]=1;
	for (int i=0;i<v[nod].size();i++) {
		int vecin=v[nod][i];
		if (r[vecin]==0) {
			l[nod]=vecin;
			r[vecin]=nod;
			sol++;
			return 1;
		}
	}
	for (int i=0;i<v[nod].size();i++) {
		int vecin=v[nod][i];
		if (cupleaza(r[vecin])) {
			l[nod]=vecin;
			r[vecin]=nod;
			return 1;
		}
	}
	return 0;
}
int main() {
	fin>>n>>m>>e;
	for (i=1;i<=e;i++) {
		fin>>x>>y;
		v[x].push_back(y);
	}
	do {
		ok=0;
		f.reset();
		for (i=1;i<=n;i++) {
			if (l[i]==0)
				ok|=cupleaza(i);
		}
	} while (ok==1);
	fout<<sol<<"\n";
	for (i=1;i<=n;i++) {
		if (l[i]!=0)
			fout<<i<<" "<<l[i]<<"\n";
	}
	return 0;
}