Cod sursa(job #2378515)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 12 martie 2019 13:20:44
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define Nmax 10001

using namespace std;

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

int N,M,E;
list <int> G[Nmax];

bool vis[Nmax];
int vL[Nmax];
int vR[Nmax];

bool match(int node){

    if(vis[node])
        return false;
    vis[node]=true;

    for(const auto &it:G[node])
        if(!vL[it]){

            vL[it]=node;
            vR[node]=it;
            return true;
        }

    for(const auto &it:G[node])
        if(match(vL[it])){

            vL[it]=node;
            vR[node]=it;
            return true;
        }
    return false;
}

int main(){

    f>>N>>M>>E;
    for(int x,y,i=1;i<=E;i++){

        f>>x>>y;
        G[x].push_back(y);
    }

    bool ok=true;
    while(ok){

        ok=false;
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=N;i++)
            if(!vR[i] and match(i))
                ok=true;
    }

    int ans=0;
    for(int i=1;i<=N;i++)
        if(vR[i])
            ++ans;
    for(int i=1;i<=N;i++)
        if(vR[i])
            g<<i<<' '<<vR[i]<<'\n';

    return 0;
}