Cod sursa(job #1518197)

Utilizator ZimmyZimmermann Erich Zimmy Data 5 noiembrie 2015 18:23:18
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <bitset>
#define N 10010
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int> v[N];
bitset<N> viz;
int n,m,e,x,y,i,s[N],d[N],continua=1,k,creste(int);
int main()
{
    f>>n>>m>>e;
    for(;e;e--)
    {
        f>>x>>y;
        v[x].push_back(y);
    }
    while(continua)
    {
        viz.reset();
        continua=0;
        for(i=1;i<=n;i++)
            if(!d[i]&&creste(i))
                {
                    continua=1;
                    k++;
                }

    }
    g<<k<<'\n';
    for(i=1;i<=n;i++)
        if(d[i])
            g<<i<<' '<<d[i]<<'\n';
    return 0;
}
int creste(int x)
{
    if(viz[x])return 0;
    viz[x]=1;
    for(auto it:v[x])
        if(!s[it])
        {
            s[it]=x;
            d[x]=it;
            return 1;
        }
    for(auto it:v[x])
        if(creste(s[it]))
        {
            s[it]=x;
            d[x]=it;
            return 1;
        }
    return 0;
}