Cod sursa(job #2740379)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 12 aprilie 2021 19:03:09
Problema Cuplaj maxim in graf bipartit Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<vector<int>> s(10001);
vector<vector<int>> d(10001);
vector<int> l(10001);
vector<int> r(10001);
int rez;
bool pairup(int nod){
    for(auto v:s[nod]){
        if(r[v]==-1){
            r[v]=nod;
            l[nod]=v;
            rez++;
            return 1;
        }
    }
}

int main(){
    int n,m,e;
    in>>n>>m>>e;
    for(int i=0;i<e;i++){
        int x,y;
        in>>x>>y;
        s[x].push_back(y);
        d[y].push_back(x);
    }
    for(int i=1;i<=n;i++){
        l[i]=-1;
    }
    for(int i=1;i<=m;i++){
        r[i]=-1;
    }
    for(int i=1;i<=n;i++){
        if(!pairup(i)){
            for(auto v:s[i]){
                if(pairup(r[v])){
                    l[i]=v;
                    r[v]=i;
                    rez++;
                }
            }
        }
    }
    out<<rez<<"\n";
    for(int i=1;i<=n;i++){
        if(l[i]!=-1){
            out<<i<<" "<<l[i]<<"\n";
        }
    }
}