Cod sursa(job #968144)

Utilizator dropsdrop source drops Data 1 iulie 2013 20:37:14
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <ctime>
#include <string>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream ff("cuplaj.in");
ofstream gg("cuplaj.out");
#define max 10001
vector<int> vv[max];
int n, m, k, aa[max], bb[max];
bool ww[max];

bool dfs(int a){
	int b, l;
	if(ww[a]) return 0;
	ww[a]=1;
	l=vv[a].size();
	for(int i=0;i<l;i++){
		b=vv[a][i];
		if(bb[b]==0 || dfs(bb[b])){
			bb[b]=a;
			aa[a]=b;
			return 1;
		}
	}
	return 0;
}

void cup(){
	int c=0;
	bool r=1;
	while(r){
		memset(ww, 0, sizeof(ww));
		r=0;
		for(int i=1;i<=n;i++)
		if(aa[i]==0 && dfs(i)){
			c+=1;
			r=1;
		}
	}
	gg << c << endl;
	for(int i=1;i<=n;i++)
		if(aa[i]) gg << i << " " << aa[i] << "\n";
}

int main(){
	int a, b;
	ff >> n >> m >> k;
	for(int i=0;i<k;i++){
		ff >> a >> b;
		vv[a].push_back(b);
	}
	cup();
}