Cod sursa(job #782528)

Utilizator stefanzzzStefan Popa stefanzzz Data 28 august 2012 11:07:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <vector>
#define MAXN 10005
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

int n,m,e,l[MAXN],r[MAXN],x,y,maxcupl;
vector<int> G[MAXN];
bool uz[MAXN],gata;

bool pair_up(int p);

int main()
{
    int i;
    f>>n>>m>>e;
    for(i=1;i<=e;i++){
        f>>x>>y;
        G[x].push_back(y);}
    while(!gata){
        gata=1;
        for(i=1;i<=n;i++)
            uz[i]=0;
        for(i=1;i<=n;i++){
            if(!l[i]&&pair_up(i)){
                maxcupl++;
                gata=0;}}}
    g<<maxcupl<<'\n';
    for(i=1;i<=n;i++)
        if(l[i])
            g<<i<<' '<<l[i]<<'\n';
    f.close();
    g.close();
    return 0;
}

bool pair_up(int p){
    int i;
    if(uz[p])return 0;
    uz[p]=1;
    for(i=0;i<G[p].size();i++)
        if(!r[G[p][i]]||pair_up(r[G[p][i]])){
            r[G[p][i]]=p;
            l[p]=G[p][i];
            return 1;}
    return 0;}