Cod sursa(job #1359326)

Utilizator jacobshelo there jacobs Data 24 februarie 2015 22:08:58
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>
#include <cstring>
#define pb push_back
using namespace std;
int m,n,e,st[10001],dr[10001],u[10001],nr,i,x,y,cup;
vector <int> g[100091];
bool cuplaj( int i)

{
    if(u[i]) {return 0;}
    u[i]=1;
    for(vector <int> :: iterator it=g[i].begin();it!=g[i].end();++it)
    {
        if( cuplaj(dr[*it]) || !dr[*it])
        {
             st[i]=*it;
             dr[*it]=i;
             return 1;
        }
    }
    return 0;
}
int main()
{
    freopen("cuplaj.in","r",stdin);
    freopen("cuplaj.out","w",stdout);
    scanf("%d %d %d",&n,&m,&e);
    for(i=1;i<=e;++i)
    {
        scanf("%d %d",&x,&y);
        g[x].pb(y);
    }
    cup=1;
    while(cup)
    {     memset(u,0,sizeof(u));
          cup=0;
          for(i=1;i<=n;++i)
          {
              if(st[i]==0) cup+=cuplaj(i);

          }
    }
    for(i=1;i<=n;++i)
    {
       if(st[i]) nr++;
    }
    printf("%d\n",nr);
    for(i=1;i<=n;++i)
    {
        if(st[i]) printf("%d %d\n",i,st[i]);
    }
    return 0;
}