Cod sursa(job #2396624)

Utilizator DimaTCDima Trubca DimaTC Data 3 aprilie 2019 17:54:57
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include<bits/stdc++.h>
#define N 10030

using namespace std;

int n,m,e,rs,l[N],r[N],viz[N];
vector<int>V[N];

bool DFS(int x) {
    viz[x]=1;
    for (auto it:V[x]) {
        if (!r[it] || !viz[r[it]] && DFS(r[it])) {
            r[it]=x;
            l[x]=it;
            return 1;
        }
    }
    return 0;
}

int main() {
    ifstream cin("cuplaj.in");
    ofstream cout("cuplaj.out");
    cin>>n>>m>>e;
    for (int i=1; i<=e; ++i) {
        int x,y; cin>>x>>y;
        V[x].push_back(y);
    }
    bool u=1;
    while (u) {
        u=0;
        for (int i=1; i<=n; ++i) viz[i]=0;
        for (int i=1; i<=n; ++i) {
            if (!l[i] && !viz[i] && DFS(i)) {
                u=1; rs++;
            }
        }
    }
    cout<<rs<<'\n';
    for (int i=1; i<=n; ++i) {
        if (l[i]) cout<<i<<" "<<l[i]<<'\n';
    }

    return 0;
}