Cod sursa(job #2808350)

Utilizator Ionut10Floristean Ioan Ionut10 Data 24 noiembrie 2021 22:17:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define DimMax 10000

using namespace std;

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

int n, m, e;
int a, b;
int l[DimMax + 1], r[DimMax + 1];
vector<int> adj[DimMax + 1];
bool viz[DimMax + 1];

bool pr ( int nod )
{
    if ( viz[nod]) return 0;

    viz[nod] = 1;
    for ( auto v: adj[nod] )
        if ( r[v] == 0 )
        {
            r[v] = nod;
            l[nod] = v;
            return 1;
        }
    for ( auto v: adj[nod] )
        if ( pr( r[v] ) )
        {
            r[v] = nod; l[nod] = v;
            return 1;
        }
    return 0;
}
int main()
{
    fin >> n >> m >> e;
    for(int i = 1; i <= e; i++ )
    {
        fin >> a >> b;
        adj[a].push_back(b);
    }
    bool ok = 1;
    while ( ok )
    {
        ok = 0;
        for ( int i = 1; i <= n; i++ )
            viz[i] = 0;
        for ( int i = 1; i <= n; i++ )
            if ( l[i] == 0 )
                ok |= pr(i);
    }
    int ans = 0;
    for ( int i = 1; i <= n; i++ )
        if ( l[i] ) ans++;

    fout << ans << '\n';
    for ( int i = 1; i <= n; i++ )
        if ( l[i] )
            fout << i << " " << l[i] << '\n';
    return 0;
}