Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

在北大OJ里的第一道网络流题,小小的纪念一下,代码留下

Posted by yuanchuanshun at 2010-07-30 12:45:11 on Problem 1273
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<queue>
#define arr 210
#define INT_MAX 214748364
using namespace std;
int map[arr][arr],pre[arr],flow[arr];
int n,m,start,end;
int BFS()
{
    int i,j,k,v,u;
    memset(pre,-1,sizeof(pre));
    for(i=1;i<=n;i++) flow[i]=INT_MAX;
    queue<int>que;
    pre[start]=0;
    que.push(start);
    while(!que.empty())
    {
       v=que.front();
       que.pop();  //清空队列; 
       for(i=1;i<=n;i++)
       {
           u=i;
           if(u==start||pre[u]!=-1||map[v][u]==0) continue;
           pre[u]=v;
           flow[u]=min(flow[v],map[v][u]);
           que.push(u);
       }
    }
    if(flow[end]==INT_MAX) return -1;
    return flow[end];
}
int Edmonds_Karp()
{
    int i,j,k,temp,now,last,ans=0;
    while(1)
    {
        temp=BFS();
        if(temp==-1) break;
        ans+=temp;
        now=end;
        while(now!=start)
        {
              last=now;
              now=pre[now];
              map[now][last]-=temp;
              map[last][now]+=temp;
        }
    }
    return ans;
}
        
int main()
{
    int i,j,k,u,v,w;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        memset(map,0,sizeof(map));
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%d",&v,&u,&w);
            map[v][u]+=w;//前面已经全部初始化了; 
        }
        start=1; end=n;
        int ans=Edmonds_Karp();
        printf("%d\n",ans);
    }
}
        

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator