Cod sursa(job #3292370)

Utilizator AdrianRosuRosu Adrian Andrei AdrianRosu Data 8 aprilie 2025 10:20:06
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define DIM 10001

using namespace std;

ifstream fin("cuplaj.in");

ofstream fout("cuplaj.out");

vector <int> G[DIM];

int found[DIM], v[DIM], x[DIM];

int n, m, Q, ok, a, b, i, paired;

bool dfs(int node){

    found[node] = 1;

    for(auto k : G[node])

        if(!x[k]){

            x[k] = node;

            v[node] = k;

            return true;

        }

    for(auto k : G[node]){

        if(!found[x[k]] && dfs(x[k])){

            x[k] = node;

            v[node] = k;

            return true;

        }

    }

    return false;

}

int main(){

    fin >> n >> m >> Q;

    while(Q--){

        fin >> a >> b;

        G[a].push_back(b);

    }

    ok = 1;

    while(ok){

        ok = 0;

        fill(found + 1, found + n + 1, 0);

        for(i=1;i<=n;i++)

            if(!v[i])

                ok |= dfs(i);

    }

    for(i=1;i<=n;i++)

        if(v[i])

            ++paired;

    fout << paired << "\n";

    for(i=1;i<=n;i++)

        if(v[i])

            fout << i << " " << v[i] << '\n';

}