Cod sursa(job #2482450)

Utilizator NashikAndrei Feodorov Nashik Data 28 octombrie 2019 12:02:16
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
//#include <iostream>
#include <fstream>
#include <vector>
#include<cstring>
using namespace std;
vector<int> v[10005];
int f[10005],dre[10005];
bool func(int i){
    int ok=0;
    f[i]=1;
    for(auto it:v[i]){
        if(dre[it]==0){
            dre[it]=i;
            return true;
        }
    }
    for(auto it:v[i]){
        if(f[dre[it]]==0)
        if(func(dre[it])){
            dre[it]=i;
            return true;
        }
    }
    return false;
}
int main()
{
    ifstream cin("cuplaj.in");
    ofstream cout("cuplaj.out");
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n,m,e,st,dr,sum=0;
    cin>>n>>m>>e;
    for(int i=1;i<=e;i++){
        cin>>st>>dr;
        v[st].push_back(dr);
    }
    for(int i=1;i<=n;i++){
        //cout<<i<<"\n";
        memset(f,0,sizeof(f));
        sum+=func(i);

    }
    cout<<sum<<"\n";
    for(int i=1;i<=m;i++){
        if(dre[i]!=0){
            cout<<dre[i]<<" "<<i<<"\n";
        }
    }
    return 0;
}