Cod sursa(job #750713)

Utilizator yamahaFMI Maria Stoica yamaha Data 22 mai 2012 21:41:45
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<vector>
using namespace std;

vector <int> G[10001];
int n, m, e, st[10001], dr[10001], viz[10001];

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

void read()
{
	f>>n>>m>>e;
	int x, y;
	for(int i=1;i<=e;i++)
    {
		f>>x>>y;
		G[x].push_back(y);
	}
}

int cuplez(int nod)
{
	int y;
	if(viz[nod]==1) return 0;
	viz[nod]=1;
	for(int i=0;i<G[nod].size();i++)
    {
		y=G[nod][i];
		if(!st[y]||cuplez(st[y]))
        {
			dr[nod]=y;
			st[y]=nod;
			return 1;
		}
	}
	return 0;
}


int main()
{
	read();
	int nr_muchii = 0;
	bool ok = 1;
	while(ok == 1)
    {
		ok = 0;
		for(int i=1;i<=n;i++) viz[i]=0;
		for(int i=1;i<=n;i++)
			if(dr[i]==0 && cuplez(i)==1)
            {
				ok = 1;
				nr_muchii++;
			}
	}
	g<<nr_muchii<<"\n";
	for(int i=1;i<=n;i++) if(dr[i]) g<<i<<" "<<dr[i]<<"\n";
	
	return 0;
}