Cod sursa(job #2344591)

Utilizator EdgeLordXDOvidiuPita EdgeLordXD Data 15 februarie 2019 11:57:36
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define N 10005
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int>a[N];
int l[N],r[N];
bool v[N];
bool func(int i){
    if(v[i]) return 0;
    v[i]=1;
    for(auto it:a[i]){
        if(!r[it]){
            r[it]=i;
            l[i]=it;
            return 1;
        }
    }
    for(auto it:a[i]){
        if(func(r[it])){
            r[it]=i;
            l[i]=it;
            return 1;
        }
    }
    return 0;
}
int main(){
    int n,m,x,y,s=0,i;
    bool k=1;
    in>>n>>m>>m;
    for(i=1; i<=m; ++i){
        in>>x>>y;
        a[x].push_back(y);
    }
    while(k){
        k=0;
        memset(v,0,sizeof(v));
        for(i=1; i<=n; ++i){
            if(!l[i]){
                x=func(i);
                k=max(k,bool(x));
                s+=x;
            }
        }
    }
    out<<s<<"\n";
    for(i=1; i<=n; ++i)
        if(l[i]) out<<i<<" "<<l[i]<<"\n";
    return 0;
}