Cod sursa(job #2434276)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 1 iulie 2019 13:42:33
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define MAX (int)(1e4+5)
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

int n,ans,px[MAX],py[MAX];
vector <int> Edge[MAX];
bool used[MAX];

void read();
void solve();
void print();
bool dfs(int);

int main(){
    read();
    solve();
    print();
    return 0;
}
bool dfs(int x){
    used[x]=1;
    for(auto it:Edge[x]){
        if(py[it] == 0 || (!used[py[it]] && dfs(py[it]))){

            py[it]=x;
            px[x]=it;

            return true;
        }
    }
    return false;
}
void solve(){
    int i, ok;

    do{ ok=0;
        memset(used,0,sizeof(used));

        for(i=1;i<=n;++i)
            if(!used[i]&&!px[i])
                ok+=dfs(i);

        ans+=ok;

    }while(ok);
}
void print(){
    int i;

    fout<<ans<<'\n';

    for(i=1;i<=n;++i)
        if(px[i])
            fout<<i<<' '<<px[i]<<'\n';
}
void read(){
    int i,m,q,x,y;
    fin>>n>>m>>q;
    for(i=0;i<q;++i){
        fin>>x>>y;
        Edge[x].push_back(y);
    }
}