Cod sursa(job #2391184)

Utilizator Constantin.Dragancea Constantin Constantin. Data 28 martie 2019 18:23:49
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;

#define N 10005
int n, m, e, r[N], l[N], ans;
vector <int> v[N];
bool viz[N];

bool dfs(int q){
    if (viz[q]) return 0;
    viz[q] = 1;
    for (auto it: v[q]){
        if (!r[it] || dfs(r[it])){
            l[q] = it;
            r[it] = q;
            return 1;
        }
    }
    return 0;
}

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