Cod sursa(job #1217674)

Utilizator rangerChihai Mihai ranger Data 7 august 2014 22:27:20
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;

ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int nmax = 10010;

vector<int> g[nmax];
int n,m,edges;
int viz[nmax],f[nmax],l[nmax];

int kuhn(int v)
{
    if (viz[v]==1) return 0;
    viz[v]=1;
    for (int i=0;i<g[v].size();i++)
    {
        int to=g[v][i];
        if (f[to]==-1 || kuhn(f[to]))
        {
            f[to]=v;
            l[v]=to;
            return 1;
        }
    }
    return  0;
}

int main()
{
    cin>>n>>m>>edges;
    while (edges--)
    {
        int x,y;
        cin>>x>>y;
        g[x].pb(y);
    }
    int k=0,i;
    for (i=1;i<=m;i++) f[i]=-1;

    for (int ind=1;ind;)
    {
        ind=0;
        for (i=1;i<=n;i++) viz[i]=0;
        for (i=1;i<=n;i++)
            if (l[i]==0) ind+=kuhn(i);
    }
    for (i=m;i>0;i--) if (f[i]!=-1) k++;
    cout<<k<<"\n";
    for (i=m;i>0;i--) if (f[i]!=-1) cout<<f[i]<<" "<<i<<"\n";
    return 0;
}