n个点 m条边

给m条边

求1->n n->1 最小花费,每条边最多走一次

两个最短路显然不行 会影响另外一条

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h> using namespace std; #define inf 100000000
#define MAXN 50000
#define MAXN1 1500 struct node
{
int fr,to,next,fl,w; }x[MAXN];
int cnt,S,T;
int head[MAXN1],dis[MAXN1],pre[MAXN1];
bool vis[MAXN1]; void add(int u,int v,int fl,int w)
{
x[cnt].fr=u;
x[cnt].next=head[u];
x[cnt].to=v;
x[cnt].fl=fl;
x[cnt].w=w;
head[u]=cnt++;
}
queue<int>q1; int spfa() //最短路的话就是可以增广 费用最少
{
memset(vis,,sizeof(vis));
memset(pre,-,sizeof(pre));
int i;
for(i=;i<=T;i++)
dis[i]=inf;
dis[S]=;
vis[S]=;
q1.push(S);
while(!q1.empty())
{
int now=q1.front();
q1.pop();
vis[now]=;
for(i=head[now];i!=-;i=x[i].next)
{
if(dis[now]+x[i].w<dis[x[i].to]&&x[i].fl)
{
dis[x[i].to]=dis[now]+x[i].w;
pre[x[i].to]=i;
if(vis[x[i].to]==)
{
q1.push(x[i].to);
vis[x[i].to]=;
}
}
}
}
int a=pre[T];
while(a!=-) //要结束了也可以更新流量
{
x[a].fl-=;
x[a^].fl+=;
a=pre[x[a].fr];
}
return pre[T]!=-;
} int main()
{
int n,m; while(scanf("%d%d",&n,&m)!=EOF)
{
int i;
cnt=;
memset(head,-,sizeof(head));
S=,T=n+;
for(i=;i<=m;i++)
{
int a,b,w; scanf("%d%d%d",&a,&b,&w);
add(a,b,,w),add(b,a,,-w); //-w 如果有一条更优的路 可以走回来+(-w);
add(b,a,,w),add(a,b,,-w);
}
add(S,,,),add(,S,,); //其实就是2次 1->n
add(n,T,,),add(T,n,,);
int ans=;
while(spfa())
ans=ans+dis[T];
printf("%d\n",ans);
}
return ;
}

网络流 poj 2135的更多相关文章

  1. POJ 2135 Farm Tour (网络流,最小费用最大流)

    POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...

  2. POJ 2135 Farm Tour (最小费用最大流模板)

    题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...

  3. poj 2135 Farm Tour 【无向图最小费用最大流】

    题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...

  4. 网络流(最小费用最大流):POJ 2135 Farm Tour

    Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...

  5. 【网络流#9】POJ 2135 Farm Tour 最小费用流 - 《挑战程序设计竞赛》例题

    [题意]给出一张无向图,从1开始到n,求两条没有公共边的最短路,使得路程总和最小 每条边的权值设为费用,最大流量设为1,然后就是从源点到汇点流量为2的最小费用流. 因为是规定了流量,新建一个源点和一个 ...

  6. Poj(2135),MCMF,模板

    题目链接:http://poj.org/problem?id=2135 Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  7. POJ 2135 Farm Tour (费用流)

    [题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...

  8. POJ - 2135最小费用流

    题目链接:http://poj.org/problem?id=2135 今天学习最小费用流.模板手敲了一遍. 产生了一个新的问题:对于一条无向边,这样修改了正向边容量后,反向边不用管吗? 后来想了想, ...

  9. POJ 2135 Farm Tour

    题目大意:有一个无向图..农夫从1号点出发..要到达N号点..然后回到1号点..来回不能走相同的路径..问最短的距离是多少. 题解:又是不能走重复路径!基本图论算法直接扔掉上网络流.不能相同就边限1, ...

随机推荐

  1. NOIP2009靶形数独[DFS 优化]

    描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独 ...

  2. [No000010]Ruby 中一些百分号(%)的用法小结

    #Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...

  3. java 28 - 5 JDK5的新特性 之 枚举的使用

    上一章,自定义了枚举类,超级麻烦.. 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是E ...

  4. Git管理项目实例说明-记录和跟踪项目

    假设一个HTML项目,使用Git来记录和跟踪这个项目,包括以下内容:1)创建版本库.2)添加与修改文件.3)创建新分支.4)打标签并整理版本库.5)克隆版本库. 1.创建版本库 Creating a ...

  5. PAT 1006. 换个格式输出整数 (15)

    让我们用字母B来表示"百".字母S表示"十",用"12...n"来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例 ...

  6. ext 自带搜索功能

  7. css 九宫格

    http://jsfiddle.net/webtiki/kQXkt/ http://jsfiddle.net/webtiki/MpXYr/3/embedded/ https://www.web-tin ...

  8. 完成卸载vs2010后再安装

    在安装好vs2010后,更改了驱动器号,造成vs工具不能使用,所以需要卸载vs2010 使用Microsoft Visual Studio 2010 Uninstall Utility来卸载vs201 ...

  9. httpserver

    改了下 # -*- coding:utf-8 -*- from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler HOST = &quo ...

  10. Linux操作系统下三种配置环境变量的方法

    现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法. 1.修改/etc/profile文件 如果你的计算机仅仅作 ...