Cod sursa(job #3334313)

Utilizator Viorel_PaulViorel-Paul Stoleri Viorel_Paul Data 17 ianuarie 2026 10:32:46
Problema Cuplaj maxim in graf bipartit Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <unordered_map>
#define NM 10000
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");

bool viz[NM+1];
int n,m,e,x,y,l[NM],r[NM];
unordered_map<int, vector<int>> muchii;

int dfs(int nod){
    if(viz[nod]) return 0;
    
    viz[nod]=1;
    
    for(auto i:muchii[nod]){
        if(r[i]==0){
            r[i]=nod;
            l[nod]=i;
            return 1;
        }
    }
    for(auto i:muchii[nod]){
        if(dfs(r[i])){
            r[i]=nod;
            l[nod]=i;
            return 1;
        }
    }
    return 0;
    
}




int main(){
    cin>>n>>m>>e;
    for(int i=1;i<=e;i++){
        cin>>x>>y;
        muchii[x].push_back(y);
    }
    
    bool ok=0;
    do {
        ok=0;
        for(int i=1;i<=n;i++)viz[i]=0;
        
        
        for(int i=1;i<=n;i++)
            if(l[i]==0)
                ok|=dfs(i);
    } while (ok);
    int ras=0;
    for(int i=1;i<=n;i++)
        if(l[i])
            ras++;
    
    cout<<ras<<"\n";
    
    for(int i=1;i<=n;i++)
        if(l[i])
            cout<<i<<" "<<l[i];
}