Cod sursa(job #3278354)

Utilizator Dragos__1_1Dragos Antohi Dragos__1_1 Data 19 februarie 2025 15:34:58
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,e,used[10006],i,j,a,b,ok,to[10006],from[10006],ans;
vector<int>v[10006];
bool cupleaza(int node){
    if (used[node]==1)return 0;
    used[node]=1;
    for (auto it:v[node]){
        if (!from[it]){
            to[node]=it;
            from[it]=node;
            return 1;
        }
    }
    for (auto it:v[node]){
        if (cupleaza(from[it])){
            to[node]=it;
            from[it]=node;
            return 1;
        }
    }
    return 0;
}
int main()
{   f>>n>>m>>e;
    for (i=1;i<=e;i++){
        f>>a>>b;
        v[a].push_back(b);
    }
    ok=1;
    while(ok){
        ok=0;
        for (i=1;i<=n;i++)used[i]=0;
        for (i=1;i<=n;i++){
            if (!to[i]){
                ok|=cupleaza(i);
            }
        }
    }
    for (i=1;i<=n;i++){
        if(to[i])ans++;
    }
    g<<ans<<'\n';
    for (i=1;i<=n;i++){
        if (to[i])
            g<<i<<' '<<to[i]<<'\n';
    }
    return 0;
}