首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

HDU 1532 && POJ 1273 Drainage Ditches (网络源)

2013-09-07 
HDU 1532 && POJ1273Drainage Ditches (网络流)转载请注明出处:http://blog.csdn.net/a1dark分析:刚学会了

HDU 1532 && POJ 1273 Drainage Ditches (网络流)

转载请注明出处:http://blog.csdn.net/a1dark

分析:刚学会了EK算法、然后重新找了一题来做、写起来非常流畅、连编译运行都没有、直接一次AC、爽死了、弱弱的我貌似有网络流天赋?嘿嘿、继续加油!

#include<stdio.h>#include<queue>#include<iostream>using namespace std;#include<string.h>#define MAXN 205#define INF 0xfffffffint map[MAXN][MAXN];int pre[MAXN];int vis[MAXN];int m,n;int bfs(int s,int t){    memset(pre,-1,sizeof(pre));    memset(vis,0,sizeof(vis));    queue<int > q;    q.push(s);    vis[s]=1;    pre[s]=s;    while(!q.empty()){        int now=q.front();        q.pop();        for(int i=1;i<=n;i++){            if(map[now][i]&&!vis[i]){                pre[i]=now;                vis[i]=1;                if(i==t)return 1;                q.push(i);            }        }    }    return 0;}int EK(int s,int t){    int i,d,flow=0;    while(bfs(s,t)){        d=INF;        for(i=t;i!=s;i=pre[i])            if(d>=map[pre[i]][i])                d=map[pre[i]][i];        for(i=t;i!=s;i=pre[i]){            map[pre[i]][i]-=d;            map[i][pre[i]]+=d;        }        flow+=d;    }    return flow;}int main(){    while(scanf("%d%d",&m,&n)!=EOF){        memset(map,0,sizeof(map));        int s,e,v;        for(int i=1;i<=m;i++){            scanf("%d%d%d",&s,&e,&v);            map[s][e]+=v;        }        printf("%d\n",EK(1,n));    }    return 0;}


热点排行