Cod sursa(job #3334278)

Utilizator Afilipoae_TeodorAfilipoae Teodor Cezar Afilipoae_Teodor Data 17 ianuarie 2026 10:05:06
Problema Cuplaj maxim in graf bipartit Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;
#define NMAX 10005

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

int n,m,e,u,v,cuplaj,uz[NMAX];
int i,j;
int adv;
vector <int> much[NMAX];
int Left[NMAX],Right[NMAX];

bool pairup(int nod)
{

    if(uz[nod])
    {
        return 0;
    }


    uz[nod]=1;

  for(int i:much[nod])
  {
      if(Right[i]==0)
      {
          Left[nod]=i;
          Right[i]=nod;
          return 1;
      }
  }



  for(int i:much[nod])
  {
      if(pairup(Right[i]))
      {
          Left[nod]=i;
          Right[i]=nod;
          return 1;
      }
  }

 return 0;
}

int main()
{

fin>>n>>m>>e;


for(i=1;i<=e;i++)
{
    fin>>u>>v;
much[u].push_back(v);

}
while(adv==0)
{
    for(i=1;i<=n;i++)
    {
        uz[i]=0;
    }

     for(i=1;i<=n;i++)
    {
        if(Left[i]==0)
        {
            adv|=pairup(i);
        }
    }

}

for(i=1;i<=n;i++)
{
    if(Left[i])
    {
        cuplaj++;
    }
}

fout<<cuplaj<<'\n';


for(i=1;i<=n;i++)
{
    if(Left[i])
    {
        fout<<i<<" "<<Left[i]<<'\n';
    }
}



    return 0;
}