Cod sursa(job #1742323)

Utilizator KonoplyankaKonoplyanka Konoplyanka Data 16 august 2016 12:27:41
Problema Cuplaj maxim in graf bipartit Scor 28
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define FOR for(vector <int> :: iterator it=V[nod].begin();it!=V[nod].end();++it)
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int i,n,m,e,sol,x,y,ok,st[5<<11],dr[5<<11];
bool viz[5<<11];
vector <int> V[5<<11];
inline bool cuplu(int nod)
{
    if(viz[nod]) return 0;
    viz[nod]=1;
    FOR
    if(!dr[*it])
    {
        dr[*it]=nod;
        st[nod]=*it;
        return 1;
    }
    FOR
    if(cuplu(*it))
    {
        dr[*it]=nod;
        st[nod]=*it;
        return 1;
    }
    return 0;
}
int main()
{
    f>>n>>m>>e;
    while(e--)
    {
        f>>x>>y;
        V[x].push_back(y);
    }
    while(!ok)
    {
        for(i=ok=1;i<=n;++i) viz[i]=0;
        for(i=1;i<=n;++i)
            if(!st[i]&&cuplu(i))
                ++sol,ok=0;
    }
    g<<sol<<'\n';
    for(i=1;i<=n;++i)
        if(st[i]) g<<i<<' '<<st[i]<<'\n';
    return 0;
}