Cod sursa(job #184666)

Utilizator vladsvvlad s vladsv Data 24 aprilie 2008 00:55:16
Problema Felinare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>

using namespace std;

#define MAX 15000

int L[MAX], R[MAX], viz[MAX];
int N,M,T,E,cnt;

vector < int > G[MAX];

inline int pairup(int n)
{
	if (viz[n])
		return 0;
	viz[n] = 1;
	vector <int> :: iterator it;
	for (it = G[n].begin(); it != G[n].end(); ++it)
		if (!L[*it]) {
			L[*it] = n;
			R[n] = *it;

			return 1;
		}
	for (it = G[n].begin(); it != G[n].end(); ++it)
		if (pairup(L[*it])) {
			L[*it] = n;
			R[n] = *it;

			return 1;
			}
	return 0;
}

int main()
{
    ifstream fin("java.in");
    ofstream fout("java.out");

    //fin>>T;
    T=1;
    while ( T != 0 )
    {
        fin>>N>>E;
        for (int i = 0; i<N; i++)
            G[i].clear();
        memset(viz,0, sizeof(viz));
        memset(L, 0, sizeof(L));
        memset(R, 0, sizeof(R));
        for ( ; E>0; E--)
        {
            int a,b;
            fin>>a>>b;
            G[a].push_back(b);
        }

        cnt=0;

        for (int i = 1; i <= N; ++i)
            if (!pairup(i)) {
                memset(viz, 0, sizeof(viz));
                cnt += pairup(i);
            } else
                ++cnt;
        fout<<2*N-cnt<<"\n";
        T--;
    }

return 0;
}