Cod sursa(job #750114)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 20 mai 2012 21:38:55
Problema Felinare Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#include<vector>
#include<algorithm>
#include<string.h>
#define dim 8200
using namespace std;


ifstream f("felinare.in");
ofstream g("felinare.out");
int w[dim],n,m,i,nr,x,y,l[dim],r[dim],change;
vector<int>G[dim];
int pairup (int x) {
	
	if(w[x])
		return 0;
	w[x]=1;
	
	for(int i=0;i<G[x].size();++i){
		
		if(!r[G[x][i]]){
			
			r[G[x][i]]=x;
			l[x]=G[x][i];
			return 1;
		}
	}
	for(int i=0;i<G[x].size();++i){
		
		if(pairup(r[G[x][i]])){
			r[G[x][i]]=x;
			l[x]=G[x][i];
			return 1;
		}
		
	}
	return 0;
}
int main () {
	
	f>>n>>m;
	
	
	for(i=1;i<=m;i++){
		f>>x>>y;
		G[x].push_back(y);
	}
	
	
	change =1;
	do{
		
		change =0;
		memset(w,0,sizeof(w));
		
		for(i=1;i<=n;i++)
			if(!l[i]){
				change|=pairup(i);
			}
	}while(change);
	for(i=1;i<=n;i++)
		if(l[i])
			nr++;
	g<<2*n-nr<<"\n";
	return 0;
}