Cod sursa(job #1415119)

Utilizator rangerChihai Mihai ranger Data 3 aprilie 2015 19:47:45
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;

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

#define pb push_back

const int Nmax =10004;
int n,m,edges,i,x,y,L[Nmax],R[Nmax],V[Nmax],RS;
vector<int> G[Nmax];

int kuhn(int v)
{
    if (V[v]) return 0;
    V[v]=1;
    for(int i=0;i<G[v].size();i++){
        int to=G[v][i];
        if (!R[to] || kuhn(R[to])){
            L[v]=to; R[to]=v;
            return  1;
        }
    }
    return 0;
}

int main()
{
    cin >> n >> m >> edges;
    while (edges--){
        cin >> x >> y;
        G[x].pb(y);
    }
    for (int ok=1;ok;){ ok=0;
        for (i=1;i<=n;i++)V[i]=0;
        for(i=1;i<=n;i++)if (!L[i]) ok+=kuhn(i);
    }
    for (i=1;i<=n;i++)if (L[i])RS++;
    cout << RS << '\n';
    for (i=1;i<=n;i++) if (L[i])
        cout << i << ' ' << L[i] << '\n';
    return 0;
}