Cod sursa(job #1378378)

Utilizator sorynsooSorin Soo sorynsoo Data 6 martie 2015 11:55:04
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int st[10010],dr[10010],n,m,i,j,x,y,t,uok,nr;
bool viz[10010];
vector<int> graf[10010];
int cuplaj(int nod)
{
    if(viz[nod])
        return 0;

    viz[nod]=true;
    for(int i=0; i<graf[nod].size(); i++)
    {
        int next=graf[nod][i];
        if(!dr[next] || cuplaj(dr[next]))
        {
            st[nod]=next;
            dr[next]=nod;
            return 1;
        }
    }
    return 0;
}
int main()
{
    cin>>n>>m>>t;
    for(i=1; i<=t; i++)
    {
        cin>>x>>y;
        graf[x].push_back(y);
    }
    uok=1;
    while(uok)
    {
        uok=0;
        for(i=1; i<=n; i++)
            viz[i]=0;

        for(i=1; i<=n; i++)
            if(!st[i])
                uok+=cuplaj(i);

    }
    for(i=1; i<=n; i++)
        if(st[i])
            nr++;

    cout<<nr<<"\n";
    for(i=1; i<=n; i++)
        if(st[i])
            cout<<i<<" "<<st[i]<<"\n";

}