Cod sursa(job #1608509)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 22 februarie 2016 09:52:36
Problema Cuplaj maxim in graf bipartit Scor 12
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

int n,m,e,v,u;
vector<int> con[20010];
vector<int> nrleg[20010];
bool vizleg[120010];
bool viz[20010];
int tata[20010];
queue<int> q;
int res;

struct str
{

}a[10010];

int bfs()
{
    for(int i=0;i<=20011;i++)
    {
        viz[i]=0;
    }

    q.push(0);
    viz[0]=1;
    int curr,next,leg;

    while(!q.empty())
    {
        curr=q.front();
        //vector<int>::iterator it2=nrleg[curr].begin();
        for(vector<int>::iterator it=con[curr].begin();it!=con[curr].end();it++)
        {
            next=*it;
            //leg=*it2;
            if(next==20001)
            {
                res++;
            }
            else
            {
                if(viz[next]==0)
                {
                    viz[next]=1;
                    q.push(next);
                }
            }
            //it2++;
        }
        q.pop();
    }
    return viz[20001];
}

int main()
{
    freopen("cuplaj.in","r",stdin);
    freopen("cuplaj.out","w",stdout);

    scanf("%d %d %d",&n,&m,&e);

    for(int i=1;i<=e;i++)
    {
        scanf("%d %d",&v,&u);
        con[v].push_back(u+n);
    }

    for(int i=1;i<=n;i++)
    {
        con[0].push_back(i);
    }
    for(int i=n+1;i<=n+m;i++)
    {
        con[i].push_back(20001);
    }

    bfs();

    printf("%d\n0",res);
}