Cod sursa(job #3243926)

Utilizator Ilinca_Radu_2022Radu Ilinca-Rucsandra Ilinca_Radu_2022 Data 22 septembrie 2024 14:17:38
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define MAX 10000
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int>v1[MAX+5], v2[MAX+5];
int a, b, m, x, y, i, nod, cuplat1[MAX+5], cuplat2[MAX+5];
bool viz[MAX+5];
vector<pair<int, int>>r;
bool dfs(int nod) {
    viz[nod]=1;
    for (int x:v1[nod]) {
        if (cuplat2[x]==0 || (viz[cuplat2[x]]==0 && dfs(cuplat2[x])==1)) {
            cuplat2[x]=nod;
            return 1;
        }
    }
    return 0;
}
int main()
{
    fin>>a>>b>>m;
    for (i=1; i<=m; i++) {
        fin>>x>>y;
        v1[x].push_back(y);
        v2[y].push_back(x);
    }
    x=1;
    while (x==1) {
        for (i=1; i<=a; i++) viz[i]=0;
        for (nod=1; nod<=a; nod++) {
            if (cuplat1[nod]==0) {
                x=dfs(nod);
                if (x==1) {
                    cuplat1[nod]=1;
                    break;
                }
            }
        }
    }
    for (i=1; i<=b; i++) {
        if (cuplat2[i]!=0) r.push_back({cuplat2[i], i});
    }
    fout<<r.size()<<'\n';
    for (auto x:r) fout<<x.first<<' '<<x.second<<'\n';
    return 0;
}