Cod sursa(job #2651390)

Utilizator aser.cobaschiCobaschi Aser aser.cobaschi Data 22 septembrie 2020 15:32:55
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int N = 10010;
int n,m,k,x,y,L[N],R[N],cnt;
vector<int> v[N];
bitset<N> viz;

bool creste(int);
int main()
{
    f>>n>>m>>k;
    for(int i=1; i<=k; i++)
    {
        f>>x>>y;
        v[x].push_back(y);
    }
    bool ok=true;
    while(ok)
    {
        ok=false;
        viz.reset();
        for(int i=1; i<=n; i++)
            if(!R[i]&&creste(i))
            {
                cnt++;
                ok=true;
            }
    }
    g<<cnt<<'\n';
    for(int i=1;i<=n;i++)
        if(R[i])
            g<<i<<' '<<R[i]<<'\n';
    return 0;
}
bool creste(int a)
{
    if(viz[a])
        return false;
    viz[a]=1;
    for(auto b:v[a])
        if(!L[b])
        {
            R[a]=b;
            L[b]=a;
            return true;
        }
    for(auto b:v[a])
        if(creste(L[b]))
        {
            R[a]=b;
            L[b]=a;
            return true;
        }
    return false;
}