Cod sursa(job #570826)

Utilizator pykhNeagoe Alexandru pykh Data 3 aprilie 2011 17:19:15
Problema Felinare Scor 4
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<bitset>
#include<vector>
using namespace std;

const char in[]="felinare.in";
const char out[]="felinare.out";

const int N_Max = 8200;

vector<int>G[N_Max];
bitset<N_Max>u;
int r[N_Max], l[N_Max], N, M, cnt;

bool cuplaj(int x)
	{
		vector<int>::iterator it;
		if(u[x])return 0;
		u[x] = true;
		
		for(it = G[x].begin() ; it != G[x].end() ; ++it)
			if(!r[*it])
			{
				r[x] = *it;
				l[*it] = x;
				return true;
			}
		
		for(it = G[x].begin() ; it != G[x].end() ; ++it)
			if(cuplaj(r[*it]))
			{
				r[x] = *it;
				l[*it] = x;
				return true;
			}
		return false;
}

int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		
		scanf("%d %d", &N, &M);
		
		for(int i = 1, x, y; i <= M ; ++i)
		{
			scanf("%d %d", &x, &y);
			G[x].push_back(y);
		}
		
		for(int i = 1 ; i <= N ; ++i)
		if(!cuplaj(i)){
			u.reset();
			cnt += cuplaj(i);
		}
		else ++cnt;
		printf("%d\n", 2*N - cnt);
		return 0;
}