Drolca

Apologize To Drolca
随笔 - 28, 文章 - 1, 评论 - 6, 引用 - 0
数据加载中……

pku 3281 Dining

 

#include <iostream>
using namespace std;
#define maxn 401
int g[maxn][maxn];//容量
int f[maxn][maxn];//流量
int r[maxn][maxn];//残量 

int Edmonds_Karp(int g[][maxn],int s,int t,int f[][maxn]) 

    
int i,j,k,c,head,tail,flow=0 ; 
    
int prev[maxn],visit[maxn],q[maxn]; 
    
for(i=s;i<=t;i++)for(j=s;j<=t;j++
    

        f[i][j]
=0 ; 
        r[i][j]
=g[i][j]; 
    }
 
    
while(1
    

        head
=tail=0 ; 
        memset(visit,
0,sizeof(visit)); 
        q[tail
++]=s ; 
        prev[s]
=-1 ; 
        visit[s]
=1 ; 
        
while(head<tail) 
        

            k
=q[head++]; 
            
for(i=s;i<=t;i++//注意修改
                if(!visit[i]&&r[k][i]>0
                

                    visit[i]
=1 ; 
                    prev[i]
=k ; 
                    
if(i==t)goto next ; 
                    q[tail
++]=i ; 
                }
 
        }
 
        next : 
        
if(!visit[t])break ; 
        
for(c=INT_MAX,j=t;j!=s;j=i) 
        

            i
=prev[j]; 
            
if(c>r[i][j])c=r[i][j]; 
        }
 
        
for(j=t;j!=s;j=i) 
        

            i
=prev[j]; 
            f[i][j]
+=c ; 
            f[j][i]
=-f[i][j]; 
            r[i][j]
=g[i][j]-f[i][j]; 
            r[j][i]
=g[j][i]-f[j][i]; 
        }
 
        flow
+=c ; 
    }
 
    
return flow ; 
}


int main() 

    
int i,j; 
    
int s,t; 
    
int F,N,D;
    scanf(
"%d%d%d",&N,&F,&D);
    s
=0;
    t
=F+N+N+D+1;
    
for(i=1;i<=N;i++)
    
{
        
int m,n,k;
        scanf(
"%d%d",&m,&n);
        
for(j=1;j<=m;j++)//Food->Cow
        {
            scanf(
"%d",&k);
            g[k][i
+F]=1;
        }

        
        
for(j=1;j<=n;j++)//Cow->Drink
        {
            scanf(
"%d",&k);
            g[i
+F+N][k+F+N+N]=1;
        }

    }

    
for(i=1;i<=F;i++)//Sourse->Food
        g[s][i]=1;
    
for(i=1;i<=N;i++)//Cow->Cow
        g[F+i][F+N+i]=1;
    
for(i=1;i<=D;i++)//Drink->Terminal
        g[i+F+N+N][t]=1;
    printf(
"%d\n",Edmonds_Karp(g,s,t,f)); 
    
return 0
}

posted on 2009-08-17 13:53 Drolca 阅读(179) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理