Cod sursa(job #2018945)

Utilizator patcasrarespatcas rares danut patcasrares Data 6 septembrie 2017 14:25:46
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<iostream>
#include<cmath>
#include<algorithm>
#include<fstream>
#include<vector>
#include<cctype>
#include<bitset>
#include<queue>
#include<iomanip>
#include<cmath>
#include<cstring>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,a,b,x[10005],y[10005],nr,v[10005];
vector<int>gr[10005];
int ve(int nod)
{
    if(v[nod]==1)
        return 0;
    v[nod]=1;
    for(auto i:gr[nod])
        if(y[i]==0)
        {
            x[nod]=1;
            y[i]=nod;
            return 1;
        }
    for(auto i:gr[nod])
        if(y[i]!=nod&&ve(y[i]))
        {
            x[nod]=1;
            y[i]=nod;
            return 1;
        }
    return 0;
}
int main()
{
    fin>>n>>m>>e;
    for(int i=1;i<=e;i++)
    {
        fin>>a>>b;
        gr[a].push_back(b);
    }
    int p=1;
    while(p)
    {
        p=0;
        for(int i=1;i<=n;i++)
            v[i]=0;
        for(int i=1;i<=n;i++)
            if(x[i]==0&&ve(i))
            {
                p=1;
                nr++;
            }
    }
    fout<<nr<<'\n';
    for(int i=1;i<=m;i++)
        if(y[i]!=0)
            fout<<y[i]<<' '<<i<<'\n';
}