Cod sursa(job #2971833)

Utilizator CobzaruAntonioCobzaru Paul-Antonio CobzaruAntonio Data 28 ianuarie 2023 10:16:16
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
vector <int> g[10005];
bool cuplaj[10005],viz[10005];
int p[10005];
int n,m,e;
bool dfs (int k)
{
    viz[k] = true;
    for (auto e:g[k])
    {
        if (p[e]==0 || (viz[p[e]]==false && dfs(p[e])==true))
        {
            cuplaj[k] = true;
            p[e] = k;
            return true;
        }
    }
    return false;
}
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0);
    fout.tie(0);
    fin >> n >> m >> e;
    int i,j;
    for (i=1;i<=e;i++)
    {
        int x,y;
        fin >> x >> y;
        g[x].push_back(y);
    }
    bool siu = true;
    int rasp = 0;
    while (siu)
    {
        siu = false;
        for (i=1;i<=n;i++)
            viz[i] = false;
        for (i=1;i<=n;i++)
            if (cuplaj[i] == false && dfs(i)==true)
            {
                rasp++;
                siu = true;
            }
    }
    fout << rasp << '\n';
    for (i=1;i<=m;i++)
        if (p[i]!=0)
            fout << p[i] << ' ' << i << '\n';
    return 0;
}