Cod sursa(job #3334273)

Utilizator Adrian_SAdrian Solcanu Adrian_S Data 17 ianuarie 2026 10:01:46
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<fstream>
#include<cstdio>
#include<vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int>v[10001];
int n,m,i,j,a,b,c,l[10001],r[10001],e;
int viz[10001];
int cuplaj;
bool pairup(int x)
{
    if(viz[x]) return 0;
    viz[x]=1;
    for(auto y: v[x])
    {
        if(r[y]==0)
        {
            l[x]=y;
            r[y]=x;
            return 1;
        }
    }
    for(auto y: v[x])
    {
        if(pairup(r[y]))
        {
            l[x]=y;
            r[y]=x;
            return 1;
        }
    }
    return 0;
}
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0);
    fin>>n>>m>>e;
    for(i=1;i<=e;++i)
    {
        fin>>a>>b;
        v[a].push_back(b);
    }
    bool ok=0;
    do
    {
        ok=0;
        for(i=1;i<=n;++i)
        {
            viz[i]=0;
        }
        for(i=1;i<=n;++i)
        {
            if(l[i]==0)
                ok|=pairup(i);
        }
    }while(ok);
    for(i=1;i<=n;++i)
    {
        if(l[i])
            cuplaj++;
    }
    fout<<cuplaj<<'\n';
    for(i=1;i<=n;++i)
    {
        if(l[i])
            fout<<i<<" "<<l[i]<<'\n';
    }
    return 0;
}