Mai intai trebuie sa te autentifici.

Cod sursa(job #2482444)

Utilizator NashikAndrei Feodorov Nashik Data 28 octombrie 2019 11:57:32
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 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");
    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;
}

/*
int solve(int nod)
{
    if(viz[nod])
        return 0;
    viz[nod]=1;
    for(auto i:v[nod])
        if(!cup[1][i]||solve(cup[1][i]))
        {
            cup[0][nod]=i;
            cup[1][i]=nod;
            return 1;
        }
    return 0;
}
*/