Cod sursa(job #1630288)

Utilizator AeroHHorea Stefan AeroH Data 5 martie 2016 00:31:24
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <vector>
#include <fstream>
#define pb(x) push_back(x)
using namespace std;
vector<int> v[10002];
bool viz[10002];
int rez[10002], sol[10002], n, m, k, x, y, ok;
bool cup( int nod )
    {
    viz[nod] = true;
    for( int i = 0; i < v[nod].size(); i++ )
        if( !rez[v[nod][i]] || ( !viz[rez[v[nod][i]]] && cup( rez[v[nod][i]] ) ) )
            {
            rez[v[nod][i]] = nod;
            sol[nod] = v[nod][i];
            return true;
            }
    return false;
    }
int main ()
    {
    int i;
    ifstream f( "cuplaj.in" );
    ofstream g( "cuplaj.out" );
    f >> n >> m >> k;
    while( k )
        {
        f >> x >> y;
        v[x].pb( y );
        k--;
        }
    ok = 1;
    while( ok )
        {
        ok = 0;
        for( i = 1; i <= n; i++ )
            if( !viz[i] && !sol[i] )
                if( cup( i ) ) ok++;
        for( i = 1; i <= n; i++ )
            viz[i] = false;
        }
    for( i = 1; i <= n; i++ )
        if( sol[i] ) ok++;
    g << ok << '\n';
    for( i = 1; i <= n; i++ )
        if( sol[i] )
            g << i << " " << sol[i] << '\n';
    f.close();
    g.close();
    return 0;
    }