Cod sursa(job #2540426)

Utilizator Savu_Stefan_CatalinSavu Stefan Catalin Savu_Stefan_Catalin Data 7 februarie 2020 09:57:36
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector <int> G[10101];
bool use[10101];
int st[10101],dr[10101],ans,i,n,x,y,m,k;
int cup(int nod)
{
    use[nod]=true;
    for (auto i:G[nod])
        if (!dr[i])
    {
        st[nod]=i;
        dr[i]=nod;
        return 1;
    }
    for (auto i:G[nod])
    {
        if (!use[dr[i]]&&cup(dr[i]))
        {
            st[nod]=i;
            dr[i]=nod;
            return 1;
        }
    }
    return 0;
}
int cup_ma()
{
   bool ok=true;
   ans=0;
  // while (ok)
  // {
       ok=0;
       for (i=1;i<=n;++i)
        if (!use[i]&&!st[i])
       {
           memset(use,false,sizeof(use));
           ok|=cup(i);
       }
   //}
   for (i=1;i<=n;++i) ans+=(st[i]!=0);
   return ans;
}
int main()
{
 in>>n>>m>>k;
  for (i=1;i<=k;++i)
  {
      in>>x>>y;
      G[x].push_back(y);
  }
  ans=cup_ma();
  out<<ans<<'\n';
  for (i=1;i<=n;++i)
    if (st[i]) out<<i<<" "<<st[i]<<'\n';
    return 0;
}