Cod sursa(job #1454044)

Utilizator mikeshadowIon Complot mikeshadow Data 25 iunie 2015 12:52:08
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");

#define MAXN 10000

int n,m,e;

int f[MAXN];

vector<int> ed[MAXN];

vector<bool> us;
vector<int> mt;

bool kuhn (int x)
{
	if (us[x]) return false;
	us[x]  = 1;
	for (auto i:ed[x])
		if (mt[i]==-1 || kuhn(mt[i]))
			{
				mt[i] = x;
				return true;
			}
	return false;
}

int main()
{
    cin>>n>>m>>e;

    for (int i=0; i<e; i++)
	{
		int x,y;
		cin>>x>>y;
		x--,y--;
		ed[x].push_back(y);		
	}


	mt.assign(m,-1);
	for (int i=0; i<n; i++)
	{
		us.assign(n,0);
		kuhn(i);
	}

	int ans = 0;
	for (int i=0; i<m; i++)
		if (mt[i]+1) ans++;
	cout<<ans<<'\n';
	for (int i=0; i<m; i++)
		if (mt[i]+1)	cout<<mt[i]+1<<' '<<i+1<<'\n';	

	return 0;
}