Cod sursa(job #1867492)

Utilizator danstefanDamian Dan Stefan danstefan Data 4 februarie 2017 10:11:34
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
int st[10010],dr[10010],m,n,e,i,x,y,nr,ok;
vector<int>v[10010];
bool ap[10010];
int cuplaj(int nod)
{
    if(ap[nod])return 0;
    ap[nod]=1;
    for(auto &it: v[nod])
        if(!dr[it])
        {
            dr[it]=nod;
            st[nod]=it;
            return 1;
        }
    for(auto &it: v[nod])
        if(cuplaj(dr[it])==1)
        {
            dr[it]=nod;
            st[nod]=it;
            return 1;
        }
    return 0;
}
int main()
{
    ifstream f ("cuplaj.in");
    ofstream g ("cuplaj.out");
    f>>n>>m>>e;
    for(i=1; i<=e; ++i)
    {
        f>>x>>y;
        v[x].push_back(y);
    }
    ok=1;
    while(ok)
    {
        ok=0;
        for(i=1; i<=n; ++i)
            ap[i]=false;
        for(i=1; i<=n; ++i)
            if(!st[i])ok|=cuplaj(i);
    }
    for(i=1; i<=n; ++i)
        if(st[i])++nr;
    g<<nr<<'\n';
    for(i=1; i<=n; ++i)
        if(st[i])g<<i<<" "<<st[i]<<'\n';
    return 0;
}