Cod sursa(job #2720424)

Utilizator Rares09Rares I Rares09 Data 10 martie 2021 20:25:42
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <cstring>
#include <vector>

using namespace std;

ifstream cin ("cuplaj.in");
ofstream cout ("cuplaj.out");

int n, m, e, nrc;
int c[2][10005];
bool used[10005];
vector <int> l[10005], r[10005];

bool cupleaza(int node)
{
    used[node] = true;

    for(auto it = l[node].begin(); it != l[node].end(); ++it)
    {
        if(!c[1][*it] || (used[c[1][*it]] == false && cupleaza(c[1][*it]) == true))
        {
            c[1][*it] = node;
            c[0][node] = *it;
            return 1;
        }
    }

    return 0;
}

int main()
{
    cin >> n >> m >> e;

    for(int i = 1; i <= e; ++i)
    {
        int a, b;
        cin >> a >> b;
        l[a].push_back(b);
        r[b].push_back(a);
    }

    for(int i = 1; i <= n; ++i)
    {
        if(!c[0][i])
        {
            memset(used, 0, sizeof used);
            cupleaza(i);

            if(c[0][i])
                ++nrc;
        }
    }

    cout << nrc << '\n';

    for(int i = 1; i <= n; ++i)
    {
        if(c[0][i])
        {
            cout << i << ' ' << c[0][i] << '\n';
        }
    }

    return 0;
}