Cod sursa(job #2738615)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 6 aprilie 2021 09:48:03
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;

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

int n, m ,e, l[10005], r[10005];
vector<int> g[10005];
bool v[10005];

bool dfs(int x) {
    v[x] = true;
    for(auto next: g[x])
        if(!l[next] || (!v[l[next]] && dfs(l[next]))) {
            l[next] = x;
            r[x] = next;
            return true;
        }
    return false;
}

int main() {
    fin >> n >> m >> e;
    while(e--) {
        int u, v;
        fin >> u >> v;
        g[u].push_back(v);
    }

    int nr = 0;
    bool ok = true;
    while(ok) {
        ok = false;
        for(int i = 1; i <= n; i++) v[i] = false;
        for(int i = 1; i <= n; i++)
            if(!v[i] && !r[i] && dfs(i)) {
                ok = true;
                nr++;
            }
    }
    fout << nr << '\n';
    for(int i = 1; i <= n; i++)
        if(r[i]) fout << i << ' ' << r[i] << '\n';
}