Cod sursa(job #2849422)

Utilizator RTG123Razvan Diaconescu RTG123 Data 15 februarie 2022 09:46:50
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define INF 100000
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,k,a,b,viz[10001],change=1,l[10001],r[10001],nr;
vector <vector <int>> v(10001);
int pairing (int cur)
{
    if (viz[cur]) return 0;
    viz[cur]=1;
    for (int i=0; i<v[cur].size(); i++)
    {
        int next=v[cur][i];
        if (!r[next])
        {
            l[cur]=next;
            r[next]=cur;
            return 1;
        }
    }
    for (int i=0; i<v[cur].size(); i++)
    {
        int next=v[cur][i];
        if (pairing(r[next]))
        {
            l[cur]=next;
            r[next]=cur;
            return 1;
        }
    }
    return 0;
}
int main()
{
    f>>n>>m>>k;
    for (int i=1; i<=k; i++)
    {
        f>>a>>b;
        v[a].push_back(b);
    }
    while (change>0)
    {
       // cout<<"DA";
        change=0;
        memset(viz,0,sizeof(viz));
        for (int i=1; i<=n; i++)
        {
            if (!l[i])
            {
                //cout<<i<<'\n';
                change|=pairing(i);
            }
        }
        //cout<<change<<'\n';
    }
    for (int i=1; i<=n; i++)
    {
        if (l[i]>0)
            nr++;
    }
    cout<<nr<<'\n';
    for (int i=1; i<=n; i++)
    {
        if (l[i]>0)
            cout<<i<<' '<<l[i]<<'\n';
    }
    return 0;
}