Cod sursa(job #1849845)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 17 ianuarie 2017 21:23:45
Problema Cuplaj maxim in graf bipartit Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,i,j,x,y,a[10005],mn,c,ok,p,ct,r1[10005],r2[10005],G[10005];
bool viz[10005];
struct bla{int poz,val;}g1[10005],g2[10005];
vector <int>v[10005];
inline bool cmp(bla A,bla B)
  {return A.val<B.val;
  }
int main()
{fin>>n>>m>>e;
 for(i=1;i<=e;i++)
    {fin>>x>>y;
     v[x].push_back(y);
     g1[x].val++;
     g2[y].val++;
     G[x]++;
    }
 for(i=1;i<=n;i++)
    g1[i].poz=i;

 for(i=1;i<=m;i++)
    g2[i].poz=i;

 sort(g1+1,g1+n+1,cmp);
 for(i=1;i<=n;i++)
    {mn=1000000000;
     c=g1[i].poz;
     //fout<<c<<" "<<G[c]<<"\n";
     ok=0;
     for(j=0;j<G[c];j++)
        {if(viz[v[c][j]]==0&&g2[v[c][j]].val<mn)
           {p=v[c][j];
            mn=g2[v[c][j]].val;
            ok=1;
           }
        }
     if(ok==1){viz[p]=1;
               for(j=0;j<G[c];j++)
                  g2[v[c][j]].val--;
               ct++;r1[ct]=c;r2[ct]=p;}
    }
 fout<<ct<<"\n";
 for(i=1;i<=ct;i++)
    {fout<<r1[i]<<" "<<r2[i]<<"\n";
    }
}