Cod sursa(job #2414496)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 24 aprilie 2019 17:08:08
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,e,x,y,ans,S[10010],D[10010];
vector<int> a[10010],b[10010];
bitset<100010> viz;

bool ver(int poz){
    if(viz[poz])return 0;
    viz[poz]=1;
    for(auto it:a[poz])
        if(!D[it])
        {
            S[poz]=it;
            D[it]=poz;
            return 1;
        }
    for(auto it:a[poz])
        if(ver(D[it]))
        {
            S[poz]=it;
            D[it]=poz;
            return 1;
        }
    return 0;
}

int main()
{
    f>>n>>m>>e;
    for(;e;e--){
        f>>x>>y;
        a[x].push_back(y);
        b[y].push_back(x);
    }
    bool ok=1;
    while(ok){
        ok=0;viz.reset();
        for(int i=1;i<=n;i++)
            if(!S[i])
                if(ver(i))
                    ok=1,ans++;
    }
    g<<ans<<'\n';
    for(int i=1;i<=n;i++)
        if(S[i])
            g<<i<<' '<<S[i]<<'\n';
    return 0;
}