Cod sursa(job #1147362)

Utilizator cat_red20Vasile Ioana cat_red20 Data 19 martie 2014 19:28:28
Problema Felinare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include<fstream>
#include<vector>
#include<cstring>
#define MAXN 10001
using namespace std;
int viz[MAXN],r[MAXN],l[MAXN],n,m,e,ok,sol,t;
vector<int> g[MAXN];
ifstream fin("java.in");
ofstream fout("java.out");
void citire()
{
    int x,y;
    fin>>n>>m>>e;
    for(int i=1; i<=e; i++)
    {
        fin>>x>>y;
        g[x].push_back(y);
    }
}

int cupleaza(int nod)
{
    if(viz[nod])
        return 0;
    viz[nod]=1;
    for(vector<int>:: iterator it=g[nod].begin(); it!=g[nod].end(); it++)
    {
        if(r[*it]==0)
        {
            r[*it]=nod;
            l[nod]=*it;
            return 1;
        }
    }
    for(vector<int>:: iterator it=g[nod].begin(); it!=g[nod].end(); it++)
    {
        if(cupleaza(r[*it]))
        {
            r[*it]=nod;
            l[nod]=*it;
            return 1;
        }
    }
    return 0;
}

int main()
{
    fin>>t;
    for(t; t>0; t--)
    {
        sol=0;
        citire();
        do
        {
            ok=0;
            memset(viz,0,sizeof(viz));
            for(int i=1; i<=n; i++)
            {
                if(l[i]==0 && cupleaza(i))
                {
                    ok=1;
                    sol++;
                }
            }
        }
        while(ok);

        fout<<sol<<"\n";

        memset(l,0,sizeof(l));
        memset(r,0,sizeof(r));
        for(int i=1;i<=n;i++)
        g[i].clear();

    }
    return 0;
}