Cod sursa(job #1936479)

Utilizator gbibBacotiu Gabi gbib Data 23 martie 2017 09:45:00
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");

const int pat=10004;
bool viz[pat];
vector <int> v[pat];
int dreapta[pat];
int stanga[pat];
int c;

int cupleaza(int nod)
{
    int i, nou,lg;
    if(viz[nod])
        return 0;
    viz[nod]=1;

    lg=v[nod].size();
    for(i=0;i<lg;i++)
    {
        nou=v[nod][i];
        if(stanga[nou]==0 || cupleaza(stanga[nou]))
        {
            stanga[nou]=nod;
            dreapta[nod]=nou;
            return 1;
        }
    }
    return 0;

}

int main()
{int n,m,i,e,x,y,ok;
in>>n>>m>>e;
for(i=1;i<=e;i++)
{
    in>>x>>y;
    v[x].push_back(y);
}
ok=1;
while(ok)
{
    ok=0;
    memset(viz, 0 ,sizeof(viz));
    for(i=1;i<=n;i++)
        if(!dreapta[i])
        {
            if(cupleaza(i))
            ok=1;
        }
}
for(i=1;i<=n;i++)
    if(dreapta[i])
    c++;
out<<c<<'\n';
for(i=1;i<=n;i++)
    if(dreapta[i])
    out<<i<<" "<<dreapta[i]<<'\n';
    return 0;
}