Cod sursa(job #2484001)

Utilizator Savu_Stefan_CatalinSavu Stefan Catalin Savu_Stefan_Catalin Data 30 octombrie 2019 16:56:36
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 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;
       memset(use,false,sizeof(use));
       for (i=1;i<=n;++i)
        if (!use[i]&&!st[i])
       {
           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;
}