Cod sursa(job #2234089)

Utilizator PetyAlexandru Peticaru Pety Data 25 august 2018 12:15:26
Problema Cuplaj maxim in graf bipartit Scor 4
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

vector<int>G[10002];
int st[10002], dr[10002];
int n, m, e, x, y;
bool viz[10002];

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

bool cuplaj (int x) {
  if (viz[x])
    return 0;
  viz[x] = 1;
  for (int i = 0; i < G[x].size(); i++) {
    int v = G[x][i];
    if (!dr[v] || cuplaj(v)) {
      st[x] = v;
      dr[v] = x;
      return 1;
    }
  }
}

int main()
{
  fin >> n >> m >> e;
  for (int i = 1; i <= e; i++) {
    fin >> x >> y;
    G[x].push_back(y);
  }
  bool ok = 1;
  while (ok) {
    ok = 0;
    memset(viz, 0, sizeof(viz));
    for (int i = 1; i <= n; i++) {
      if (!st[i])
        if (cuplaj(i))
          ok = 1;
    }
  }
  int sol = 0;
  for (int i = 1; i <= n; i++)
    if (st[i])
      sol++;
  fout << sol << "\n";
  for (int i = 1; i <= n; i++)
    if (st[i])
      fout << i << " " << st[i] << "\n";
  return 0;
}