Cod sursa(job #2961336)

Utilizator CharacterMeCharacter Me CharacterMe Data 6 ianuarie 2023 11:19:49
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

#define MOD 1000000007

using namespace std;

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

bool bfs(vector<unordered_map<int, int> > graph, vector<int> past, int n, int m)
{
    queue<int> que;
    que.push(0);

    for (int i = 0; i <= n + m + 1; ++i) {
        past[i] = -1;
    }

    while (!que.empty()) {
        int now = que.front();
        que.pop();

        if (now == n + m + 1) {
            break;
        }

        for (auto nxt:graph[now]) {
            if (nxt.second) {
                continue;
            }

            if (past[nxt.first] != -1) {
                continue;
            }
            past[nxt.first] = now;
        }
    }
}

int main()
{
    int n, m, g;
    fin >> n >> m >> g;

    vector<unordered_map<int, bool> > graph(n + m + 2);

    for (int i = 1; i <= n; ++i) {
        graph[0].insert(make_pair(i, false));
        graph[i].insert(make_pair(0, false));
    }

    for (int i = n + 1; i <= n + m; ++i) {
        graph[i].insert(make_pair(n + m + 1, false));
        graph[n + m + 1].insert(make_pair(i, false));
    }

    while (g--) {
        int x, y;
        cin >> x >> y;
        graph[x].insert(make_pair(n + y, false));
        graph[n + y].insert(make_pair(x, false));
    }

    int sol = 0;
    while (bfs(graph, n, m)) {
        ++sol;
    }

    return 0;
}