【网络流#9】POJ 2135 Farm Tour 最小费用流 - 《挑战程序设计竞赛》例题
【题意】给出一张无向图,从1开始到n,求两条没有公共边的最短路,使得路程总和最小
每条边的权值设为费用,最大流量设为1,然后就是从源点到汇点流量为2的最小费用流。
因为是规定了流量,新建一个源点和一个汇点,源点到结点1连一条最大流量为2,费用为0的边,结点N到汇点连一条最大流量为2,费用为0的边,这样就规定好流量了。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,ans,big,cas,num,w,t,u,v,S,T;
bool flag; int head[MAXN],vis[MAXN],dis[MAXN],pos[MAXN],Edge,size;
char s[305][305];
struct edgenode
{
int to,next,w,cost;
} edge[MAXM]; void add_edge(int x,int y,int w,int cost)
{
edge[Edge].to=y;
edge[Edge].w=w;
edge[Edge].cost=cost;
edge[Edge].next=head[x];
head[x]=Edge;
Edge++; edge[Edge].to=x;
edge[Edge].w=0;
edge[Edge].cost=-cost;
edge[Edge].next=head[y];
head[y]=Edge;
Edge++;
} bool SPFA(int s, int t)
{
int u,v,i;
queue <int> q;
memset(vis,0,sizeof(vis));
for(i=0;i<size;i++) dis[i]=INF;
dis[s]=0;
vis[s]=1;
q.push(s);
while(!q.empty())
{
u=q.front(); q.pop(); vis[u]=0;
for (i=head[u];i!=-1;i=edge[i].next)
{
v=edge[i].to;
if(edge[i].w>0&&dis[u]+edge[i].cost<dis[v])
{
dis[v]=dis[u]+edge[i].cost;
pos[v]=i;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
return dis[t]!=INF;
}
int MinCostFlow(int s,int t)
{
int i,cost=0,flow=0;
while(SPFA(s,t))
{
int d=INF;
for (i=t;i!=s;i=edge[pos[i]^1].to)
{
d=min(d,edge[pos[i]].w);
}
for(i=t;i!=s;i=edge[pos[i]^1].to)
{
edge[pos[i]].w-=d;
edge[pos[i]^1].w+=d;
}
flow+=d;
cost+=dis[t]*d;
}
return cost; // flow是最大流值
} int main()
{
memset(head,-1,sizeof(head));Edge=0;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&t);
add_edge(x,y,1,t);
add_edge(y,x,1,t);
}
S=0;T=n+1;
size=n+2;
add_edge(S,1,2,0);
add_edge(n,T,2,0);
printf("%d\n",MinCostFlow(S,T));
return 0;
}
【网络流#9】POJ 2135 Farm Tour 最小费用流 - 《挑战程序设计竞赛》例题的更多相关文章
- POJ 2135 Farm Tour 最小费用流
两条路不能有重边,既每条边的容量是1.求流量为2的最小费用即可. //#pragma comment(linker, "/STACK:1024000000,1024000000") ...
- POJ 2135 Farm Tour (网络流,最小费用最大流)
POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...
- poj 2135 Farm Tour 【无向图最小费用最大流】
题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...
- 网络流(最小费用最大流):POJ 2135 Farm Tour
Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- POJ 2135 Farm Tour (最小费用最大流模板)
题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...
- POJ 2135.Farm Tour 消负圈法最小费用最大流
Evacuation Plan Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4914 Accepted: 1284 ...
- POJ 2135 Farm Tour(最小费用最大流)
Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...
- POJ 2135 Farm Tour (费用流)
[题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...
- POJ 2135 Farm Tour
题目大意:有一个无向图..农夫从1号点出发..要到达N号点..然后回到1号点..来回不能走相同的路径..问最短的距离是多少. 题解:又是不能走重复路径!基本图论算法直接扔掉上网络流.不能相同就边限1, ...
随机推荐
- Hive学习之六 《Hive进阶— —hive jdbc》 详解
接Hive学习五 http://www.cnblogs.com/invban/p/5331159.html 一.配置环境变量 hive jdbc的开发,在开发环境中,配置Java环境变量 修改/etc ...
- 嵌入式开发(一) Ubuntu12.04下搭建交叉编译环境
操作系统:Ubuntu12.04 AMD64位 交叉编译环境:arm-Linux gcc版本4.4.3 前言: 首先理解一下交叉编译的意思.我们要给嵌入式设备写应用程序,但是又不能在嵌入式设备上完成所 ...
- 不熟悉的CSS样式
1.font连写: 例如:font:15px/23px "ralewayregular","Helvetica Neue",Helvetica,Arial,sa ...
- jQuery banner 滑动
jQuery(document).ready(function() { var abovePos = 50; var customMax = 1600; var zIdx = 100; var $bn ...
- Java简介(3)-基本语法
1.大小写敏感 2.类名 3.方法名. 4.源文件名
- C#.Net参数
C#.Net参数 阅读目录 引言 形参和实参 命名实参 可选参数 params,数目可变参数 方法解析与重载决策 参数传递 [重难点] ref引用参数/out输出参数 参数修饰符 泛型类 ...
- APP如何设计才能适配iphone6/plus和iphone5
随着苹果发布两种新尺寸的大屏iPhone 6,iOS平台尺寸适配问题终于还是来了,移动设计全面进入"杂屏"时代.看看下面三款iPhone尺寸和分辨率数据就知道屏幕有多杂了. 移动a ...
- putty登录远程数据库Oracle
ssh username@127.0.0.1 password oracle -su plusql /nolog dbname/dbpassword sql:exit oracle:$exit ssh ...
- Fedora 19+ 启动顺序调整
首先找到Windows 8的menuentry cat /boot/grub2/grub.cfg | grep Windows 设置Windows 作为默认的启动项 grub2-set-default ...
- android host
74.125.20.31 market.android.com 74.125.20.31 developer.android.com 74.125.20.31 android.googlesource ...