Cod sursa(job #2419167)

Utilizator ApetriiRaduApetrii Radu ApetriiRadu Data 7 mai 2019 18:49:15
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

int stanga,dreapta,m,nr;
int st[NMAX],dr[NMAX];
bool uz[NMAX];
vector<int>l[NMAX];

bool cup(int nod);
int main()
{int i,x,y;
 bool ok=1;
 fin>>stanga>>dreapta>>m;
 for(i=1;i<=m;i++)
    {fin>>x>>y;
     l[x].push_back(y);
    }
 while(ok)
      {memset(uz,0,sizeof(uz));
       ok=0;
       for(i=1;i<=stanga;i++)
         if(!st[i] && !uz[i])
           if(cup(i))
            ok=1;
      }
 for(i=1;i<=stanga;i++)
      if(st[i])
        nr++;
 fout<<nr<<'\n';
 for(i=1;i<=stanga;i++)
     if(st[i])
       fout<<i<<' '<<st[i]<<'\n';
 return 0;
}
bool cup(int nod)
{if(uz[nod])
    return 0;
 uz[nod]=1;
 int i;
 for(i=0;i<l[nod].size();i++)
     if(!dr[l[nod][i]])
       {st[nod]=l[nod][i];dr[l[nod][i]]=nod;return 1;}
 for(i=0;i<l[nod].size();i++)
    if(cup(dr[l[nod][i]]))
      {st[nod]=l[nod][i];dr[l[nod][i]]=nod;return 1;}
 return 0;
}