Cod sursa(job #1613000)

Utilizator Eman98Ghinea Mihail Emanuel Eman98 Data 25 februarie 2016 10:06:45
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<fstream>
#include<vector>
#include<cstring>
#define DIM 20001
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
vector<int>G[DIM];
int l[DIM],r[DIM],nr,rcard,lcard,M,a,b,i;;
bool v[DIM];
bool cuplaj(int nod)
{
    v[nod]=1;
    for(unsigned i=0;i<G[nod].size();i++)
        if(!r[G[nod][i]])
        {
            l[nod]=G[nod][i];
            r[G[nod][i]]=nod;
            return 1;
        }
    for(unsigned i=0;i<G[nod].size();i++)
    {
        int value=r[G[nod][i]];
        if(!v[value] and cuplaj(value))
        {
            l[nod]=G[nod][i];
            r[G[nod][i]]=nod;
            return 1;
        }
    }
    return 0;
}
int main()
{
    cin>>rcard>>lcard>>M;
    for(i=1;i<=M;i++)
    {
        cin>>a>>b;
        G[a].push_back(b);
    }
    int ok=1;
    while(ok)
    {
        ok=0;
        memset(v,0,sizeof(v));
        for(i=1;i<=rcard;i++)
            if(!l[i] and cuplaj(i))
            {
                nr++;
                ok=1;
            }
    }
    cout<<nr<<"\n";
    for(i=1;i<=rcard;i++)
        if(l[i])
            cout<<i<<" "<<l[i]<<"\n";
}