Cod sursa(job #1441056)

Utilizator petremariaPetre Maria petremaria Data 23 mai 2015 15:53:24
Problema Cuplaj maxim in graf bipartit Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

vector<int> ag[10005];
int l,r,m, pairs[10005], viz[10005];

int inpair(int nod, int color)
{
    viz[nod]=color;
    for(int i=0;i<ag[nod].size();i++)
    {
        int vecin=ag[nod][i];
        if(viz[vecin]!=color)
        {
            viz[vecin]=color;
            if(pairs[vecin]==0 || inpair(pairs[vecin],color)==1)
            {
                pairs[nod]=vecin;
                pairs[vecin]=nod;
                return 1;
            }
        }
    }
    return -1;
}

int main()
{
    int a,b,i,color=0,numpair=0;
    f>>l>>r>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b;
        b=b+l;
        ag[a].push_back(b);
        ag[b].push_back(a);
    }
    int ok=1;
    while(ok==1)
    {
        color++;
        ok=0;
        for(i=1;i<=l;i++)
            if(pairs[i]==0)
                if(inpair(i,color)==1)
                {
                    numpair++;
                    ok=1;
                }
    }
    g<<numpair<<'\n';
    for(i=1;i<=l;i++)
        if(pairs[i]!=0)
            g<<i<<' '<<pairs[i]-l<<'\n';
    return 0;
}