Cod sursa(job #2596764)

Utilizator victorzarzuZarzu Victor victorzarzu Data 10 aprilie 2020 12:55:14
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int> graf[10005];
int l[10005], r[10005], viz[10005];
int n, m, e, cuplaj;

int verify(int nod)
{
  if(viz[nod]) return 0;
  viz[nod] = 1;

  for(auto vecin : graf[nod])
    if(!r[vecin])
    {
      r[vecin] = nod;
      l[nod] = vecin;
      return 1;
    }
  for(auto vecin : graf[nod])
    if(verify(r[vecin]))
    {
      r[vecin] = nod;
      l[nod] = vecin;
      return 1;
    }
  return 0;
}

void Read()
{
    int x, y;
    f>>n>>m>>e;
    for(int i = 1;i <= e;++i)
    {
      f>>x>>y;
      graf[x].push_back(y);
    }
}

void Solve()
{
  for(int i = 1;i <= n;++i)
      if(!l[i])
      {
        if(!verify(i))
        {
          memset(viz, 0, sizeof(viz));
          cuplaj += verify(i);
        }
        else ++cuplaj;
      }
  g<<cuplaj<<'\n';
  for(int i = 1;i <= n;++i)
    if(l[i])
      g<<i<<" "<<l[i]<<'\n';
}

int main()
{
  Read();
  Solve();
  return 0;
}