Cod sursa(job #240791)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 8 ianuarie 2009 18:27:49
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include <stdio.h>
#include <stdlib.h>
#include <bitset>
using namespace std;
long A,B,n,m,i,j,g[20000],x[100000],y[100000];
long sursa,dest,l,ok,flux,d[20000];
int *v[20000];
bitset <20001>mark;
bitset <20000>c[20000];
/*
void dfs(int k){
     mark[k]=1;
     for (int i=0;i<g[k]&&ok;++i)
       if (c[k][i]){
         if (v[k][i]==dest){ok=0;break;}
         if (!mark[v[k][i]])
            dfs(v[k][i]);
       }
     if (!ok)d[++l]=k;
}
*/
int main(){
    freopen("cuplaj.in","r",stdin);
    freopen("cuplaj.out","w",stdout);
    scanf("%ld %ld %ld",&A,&B,&m);
    for (i=1;i<=m;++i){
        scanf("%ld %ld",&x[i],&y[i]);
        g[x[i]]++;g[y[i]+A]++;
    }
    n=A+B;
    for (i=1;i<=n;++i){
        v[i]=(int*)malloc(g[i]*sizeof(int)+1);
        //c[i]=(int*)malloc(g[i]*sizeof(int)+1);
        g[i]=0;
    }
    for (i=1;i<=m;++i){
        v[x[i]][g[x[i]]]=y[i]+A;
        //c[x[i]][g[x[i]]++]=1;
        v[y[i]+A][g[y[i]+A]++]=x[i];
    }
    //construire sursa si destinatie
    sursa=0; dest=n+1;
    v[0]=(int*)malloc(A*sizeof(int));
    //c[0]=(int*)malloc(A*sizeof(int));
    v[dest]=(int*)malloc(B*sizeof(int));
    //c[dest]=(int*)malloc(B*sizeof(int));
    for (i=1;i<=A;++i){
        v[0][g[0]]=i;
        v[i][g[i]++]=0;
        //c[0][g[0]++]=1;
    }
    for (i=A+1;i<=n;++i){
        v[i][g[i]]=dest;
        v[dest][g[dest]++]=i;
        //c[i][g[i]++]=1;
    }
    ////
    do{
       mark.reset();d[1]=dest;l=1;ok=1;
      // dfs(0);if (ok)break;
       for (i=1;i<l;++i){
         // c[d[i+1]][d[i]]--;
         // c[d[i]][d[i+1]]++;
       }
       flux++;
    }while(0);
    printf("%ld\n",flux);
return 0;
}