Cod sursa(job #762233)

Utilizator lucian666Vasilut Lucian lucian666 Data 29 iunie 2012 14:15:21
Problema Felinare Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb



#include<fstream>
#include<vector>
#include<cstring>

#define pb push_back
#define NN 8200

using namespace std;
ofstream out("felinare.out");

int st[NN],dr[NN],n,m,uz[NN],cuplaj;
vector<int>G[NN];
typedef vector<int>::iterator IT;

void read();
int pairup(int );
void facuplaj();

int main()
{
	read();
	facuplaj();
	out<<2*n-cuplaj;
	return 0;
}


void read()
{
	ifstream in("felinare.in");
	in>>n>>m;
	for(int x,y,i=1;i<=m;i++)
	{
		in>>x>>y;
		G[x].pb(y);
	}
}

int pairup(int start)
{
	if(uz[start])
		return 0;
	uz[start]=1;
	for(IT I=G[start].begin();I!=G[start].end();++I)
		if(!st[*I] || pairup(st[*I]))
		{
			st[*I]=start;
			dr[start]=*I;
			return 1;
		}
		return 0;
}

void facuplaj()
{
	int ok=1;
	while(ok)
	{
		ok=0;
		memset(uz,0,sizeof(uz));
		for(int i=1;i<=n;i++)
			if(!dr[i])
				if(pairup(i))
					{
						++cuplaj;
						ok=1;
				}
	}
}