Cod sursa(job #3349796)

Utilizator Warrior.exeZgorcea Mihai-Alexandru Warrior.exe Data 2 aprilie 2026 15:46:17
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
const int INF = 10001;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

vector<int> graph[INF];
int n,m,e;
int used[INF];
int match1[INF],match2[INF];


int match(int ind){
    if(used[ind]){
        return 0;
    }
    used[ind]=1;

    for(auto val:graph[ind])
        if(match2[val]==0){
            match1[ind]=val;
            match2[val]=ind;
            return 1;
        }

    for(auto val:graph[ind]){
        if(match(match2[val])){
            match1[ind]=val;
            match2[val]=ind;
            return 1;
        }
    }
    return 0;
}

void citire(){
    fin>>n>>m>>e;
    for(int i=0;i<e;++i){
        int x,y;
        fin>>x>>y;
        graph[x].push_back(y);
    }
}

void solve(){
    int wasChanged=1;
    while(wasChanged){
        wasChanged=0;
        memset(used,0,sizeof(used));
        for(int i=1;i<=n;++i){
            if(!match1[i]){
                wasChanged+=match(i);
            }
        }
    }
}

void afis(){
    int matches=0;
    for(int i=1;i<=n;i++){
        if(match1[i]){
            matches++;
        }
    }
    fout<<matches<<'\n';
    for(int i=1;i<=n;i++){
        if(match1[i]){
            fout<<i<<" "<<match1[i]<<'\n';
        }
    }
}

int main(){
    citire();
    solve();
    afis();
}