Cod sursa(job #750449)

Utilizator danieladDianu Daniela danielad Data 22 mai 2012 09:41:21
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<iostream>
#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 citire(){
	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(){
	citire();
	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;
}