Cod sursa(job #2313293)

Utilizator shantih1Alex S Hill shantih1 Data 6 ianuarie 2019 16:36:46
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define nmx 10005

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

int n,m,i,j,e,x,rz;
int u[nmx],l[nmx],r[nmx];
vector<int> ad[nmx];

int pairing(int n)
{
	if(u[n])	return 0;
	u[n]=1;
	for(int i:ad[n])
		if(!r[i])
		{
			l[n]=i;
			r[i]=n;
			return 1;
		}
	for(int i:ad[n])
		if(pairing(r[i]))
		{
			l[n]=i;
			r[i]=n;
			return 1;
		}
	return 0;
}

int main() {
	
	fin>>n>>m>>e;
	while(e--)
	{
		fin>>i>>j;
		ad[i].push_back(j);
	}
	
	for(int ok=1;ok;)
	{
		ok=0;
		memset(u,0,sizeof(u));
		for(i=1;i<=n;i++)
			if(!l[i])
			{
				x=pairing(i);
				ok|=x;
			}
	}
	
	for(i=1;i<=n;i++)
		if(l[i])	rz++;
	fout<<rz<<"\n";
	for(i=1;i<=n;i++)
		if(l[i])	fout<<i<<" "<<l[i]<<"\n";
}