Cod sursa(job #3225478)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 17 aprilie 2024 18:02:01
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
long long cuplaj1[10005];
long long cuplaj2[10005];
int n, m,g ;
vector<int> adj[10005];
bool viz[10005];
bool cup(int nod )
{
    viz[nod] = true ;
    for( auto u : adj[nod] )
    {
        if  ( !cuplaj2[u] || (viz[cuplaj2[u]] == false && cup(cuplaj2[u]))   )
        {
            cuplaj1[nod] = u ;
            cuplaj2[u] = nod;
            return true ;
        }
    }
    return false ;

}
int main()
{
    cin >> n >> m >> g  ;
    for (int i = 1; i <= g; i ++)
    {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
    }
    bool ok = true ;
    long long total = 0;
    while (ok)
    {
        ok = false ;
        for( int i = 1; i <= n ; i ++ )
            viz[i] = false ;
        for ( int i = 1; i <= n ; i ++ )
        {
            if (cuplaj1[i] == false )
            {
                if( cup(i) == true )
                {
                    total ++ ;
                    ok = true ;
                }
            }
        }
    }

    cout << total << '\n';

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

    return 0;
}