Cod sursa(job #1013430)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 20 octombrie 2013 21:52:15
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <bitset>
#include <vector>

using namespace std;

vector<int> v[10005];
bitset<10005> viz;
int dr[10005];
int st[10005];

bool cupl(int unde)
{
    if(viz[unde])
        return 0;
    viz[unde]=1;
    vector<int>::iterator it;
    //if(!st[unde])
    //{
        for(it=v[unde].begin();it!=v[unde].end();it++)
            if(!dr[*it])
            {
                st[unde]=*it;
                dr[*it]=unde;
                return 1;
            }
        for(it=v[unde].begin();it!=v[unde].end();it++)
            if(cupl(dr[*it]))
            {
                st[unde]=*it;
                dr[*it]=unde;
                return 1;
            }
    //}
    return 0;
}

int main()
{
    ifstream cin("cuplaj.in");
    ofstream cout("cuplaj.out");

    int n,m,e,i,a,b;
    cin>>n>>m>>e;
    for(i=0;i<e;i++)
    {
        cin>>a>>b;
        v[a].push_back(b);
    }

    bool cont=1;
    while(cont)
    {
        cont=0;
        for(i=1;i<=n;i++)
            viz[i]=0;
        for(i=1;i<=n;i++)
            if(!st[i] && cupl(i))
                cont=1;
    }

    int cate=0;
    for(i=1;i<=n;i++)
        if(st[i])
            cate++;
    cout<<cate<<'\n';
    for(i=1;i<=n;i++)
        if(st[i])
            cout<<i<<' '<<st[i]<<'\n';

    cin.close();
    cout.close();
    return 0;
}