Cod sursa(job #2980874)

Utilizator Vladgiuscavladgiusca Vladgiusca Data 16 februarie 2023 21:21:34
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int NMAX=10005;
vector<vector<int>>G(NMAX);
int L[NMAX],R[NMAX];
bool viz[NMAX];
int N,M,E;
bool pair_up(int node){
    if(viz[node])
        return 0;
    viz[node]=1;
    int i;
    for(auto i:G[node]){
        if(!R[i]){
            R[i]=node;
            L[node]=i;
            return 1;
        }
    }
    for(auto i:G[node]){
        if(pair_up(R[i])){
            L[i]=node;
            R[node]=i;
            return 1;
        }
    }
    return 0;
}
int main(){
    int u,v;
    in>>N>>M>>E;
    int i,ans=0;
    for(i=1; i<=E; i++){
        in>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    bool ok=1;
    while(ok){
        ok=0;
        memset(viz,0,sizeof(viz));
        for(i=1; i<=N; i++)
            if(!L[i])
                if(pair_up(i))
                    ok=1;
    }
    for(i=1; i<=N; i++)
        if(L[i])
            ans++;
    out<<ans<<'\n';
    for(i=1; i<=N; i++)
        if(L[i])
            out<<i<<" "<<L[i]<<'\n';
    return 0;
}