Cod sursa(job #3336532)

Utilizator andrei1231823arama andrei robert andrei1231823 Data 24 ianuarie 2026 21:18:14
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");

int n, m, e;
bool used[10005];
int l[10005], r[10005];
vector<int> edges[10005];
bool pairup(int node) {
    if(used[node])return 0;
    used[node]=1;
    for(auto i: edges[node]) {
        if(r[i]==0) {
            l[node]=i;
            r[i]=node;
            return 1;
        }
    }
    for(auto i: edges[node]) {
        if(pairup(r[i])) {
            l[node]=i;
            r[i]=node;
            return 1;
        }
    }
    return 0;
}

int main() {
    cin>>n>>m>>e;
    for(int i=0;i<e;i++) {
        int st, dr;
        cin>>st>>dr;
        edges[st].push_back(dr);
    }
    bool changed=true;
    while(changed) {
        changed=false;
        for(int i=1;i<=n;i++) used[i]=0;
        for(int i=1;i<=n;i++)
        {
            if(l[i]==0)changed|=pairup(i);
        }
    }
    int cuplaj=0;
    for(int i=1;i<=n;i++) {
        if(l[i])cuplaj++;
    }
    for(int i=1;i<=n;i++) {
        if(l[i])cout<<i<<' '<<l[i]<<'\n';
    }
    return 0;
}