Cod sursa(job #515962)

Utilizator gorgovanAurelian Namascu gorgovan Data 22 decembrie 2010 20:08:57
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#define pb push_back
#define nmax 10001
vector<int> G[nmax];
int l[nmax],r[nmax],viz[nmax];
int cuplaj=0,S,D,M;
ofstream fout.close("cuplaj.out");

bool dfs(int x)
{
    if(viz[x]==1) return 0;
    viz[x]=1;
    vector<int>::iterator it;

    for(it=G[x].begin();it<G[x].end();it++)
    if(!l[*it])
    {
        l[*it]=x;
        r[x]=*it;
        return 1;

    }
    for(it=G[x].begin();it<G[x].end();it++)
    if(dfs(l[*it]))
    {
        l[*it]=x;
        r[x]=*it;
        return 1;
    }

    return 0;

}

void solve()
{int i;
int ok;
    ok=1;
    while(ok)
    {
        ok=0;
        for(i=1;i<=S;i++) viz[i]=0;
        for(i=1;i<=S;i++)
        if(!r[i])
        if(dfs(i))
        {
            cuplaj++;
            ok=1;

        }
    }

    cout<<cuplaj<<'\n';
    for(i=1;i<=S;i++)
    if(r[i])
    {
        fout<<i<<" "<<r[i]<<"\n";
    }

}
void cit()
{
int i,x,y;
    ifstream fin("cuplaj.in");

    fin>>S>>D>>M;
    for(i=1;i<=M;i++)
    {
        fin>>x>>y;
        G[x].pb(y);
    }
    fin.close();



}

int main()
{

    cit();
    solve();
    fout.close();
    return 0;
}