Cod sursa(job #2419168)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 7 mai 2019 18:52:53
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#define DMAX 100010

using namespace std;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

list <int> Vst[DMAX];

int st[DMAX];
int dr[DMAX];

vector <bool> uz(DMAX);

int n,m,e;

bool cup(int node);

int main(){
    int i,x,y;
    bool ok;
    fin>>n>>m>>e;
    for(i=1;i<=e;i++){
        fin>>x>>y;
        Vst[x].push_back(y);
    }
    do{
       ok=false;
       for(i=1;i<=n;i++)
           uz[i]=false;
       for(i=1;i<=n;i++)
           if(!st[i] && !uz[i])
              if(cup(i))
                 ok=true;
    }while(ok);
    int sol=0;
    for(i=1;i<=n;i++)
        if(st[i])
           sol++;
    fout<<sol<<'\n';
    for(i=1;i<=n;i++)
        if(st[i])
           fout<<i<<' '<<st[i]<<'\n';

    return 0;
}
bool cup(int node){
    if(uz[node])
       return 0;
    uz[node]=true;

    for(auto i:Vst[node])
        if(!dr[i]){
           st[node]=i;
           dr[i]=node;
           return 1;
        }
    for(auto i:Vst[node])
        if(cup(dr[i])){
           st[node]=i;
           dr[i]=node;
           return 1;
        }
    return 0;
}