Cod sursa(job #2721082)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 11 martie 2021 15:53:58
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda no-time-to-rest-v2 Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

int n,m,l,st[10005],dr[10005];
bool fost[10005];
vector<int>vecini[10005];

bool pairup(int nod)
{
 if(fost[nod]) return 0;
 fost[nod]=1;

 for(int i=0;i<vecini[nod].size();i++)
 {
  int x=vecini[nod][i];
  if(!dr[x]){
    st[nod]=x;
    dr[x]=nod;
    return 1;
  }
 }
 for(int i=0;i<vecini[nod].size();i++)
 {
  int x=vecini[nod][i];
  if( pairup(dr[x]) ){
    st[nod]=x;
    dr[x]=nod;
    return 1;
  }
 }
 return 0;
}

int main()
{
 f>>n>>m>>l;
 for(int i=1;i<=l;i++)
 {
  int x,y;
  f>>x>>y;
  vecini[x].push_back(y);
 }

 bool schimbat=1;
 while(schimbat)
 {
  schimbat=0;
  for(int i=1;i<=n;i++)
   fost[i]=0;

  for(int i=1;i<=n;i++)
    if( !st[i] ) schimbat|=pairup(i);
 }
 int cuplaj=0;
 for(int i=1;i<=n;i++) if( st[i]!=0 ) cuplaj++;

 g<<cuplaj<<'\n';

 for(int i=1;i<=n;i++)
  if( st[i]!=0 ) g<<i<<' '<<st[i]<<'\n';
}