Cod sursa(job #2426992)

Utilizator Alex18maiAlex Enache Alex18mai Data 30 mai 2019 12:45:47
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
//ALEX ENACHE

#include <vector>

using namespace std;

//#include <iostream>
#include <fstream>
ifstream cin ("cuplaj.in");ofstream cout ("cuplaj.out");

vector < int > gr[10100];
int ans[10100];
int used[10100];
int cup[10100];

bool cuplaj (int nod){
    used[nod] = 1;
    for (auto &x : gr[nod]){
        if (!ans[x] || (!used[ans[x]] && cuplaj(ans[x]))){
            ans[x] = nod;
            return 1;
        }
    }
    return 0;
}

vector < pair < int , int > > v;

int main() {

    //freopen("input", "r", stdin);freopen("output", "w", stdout);

    int n , m , e;
    cin>>n>>m>>e;

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

    int c = 1;
    while (c){
        c = 0;
        for (int i=1; i<=n; i++){
            used[i] = 0;
        }
        for (int i=1; i<=n; i++){
            if (!used[i] && !cup[i]){
                int now = cuplaj(i);
                cup[i] = now;
                c |= now;
            }
        }
    }

    for (int i=1; i<=m; i++){
        if (ans[i]){
            v.push_back({ans[i] , i});
        }
    }

    cout<<v.size()<<'\n';

    for (auto &x : v){
        cout<<x.first<<" "<<x.second<<'\n';
    }


    return 0;
}