POJ2135:Farm Tour
题意:给定一个无向图,从1走到n再从n走回1,每个边只能走一遍,求最短路
题解:可以定义一个源点s,和一个汇点t
s和1相连容量为2,费用为0,
t和n相连容量为2,费用为0
然后所用的边的容量都定为1,跑一遍最小费用最大流即可
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<queue> 6 #include<vector> 7 #define MAXN 1000+10 8 #define INF 0x7f7f7f7f 9 #define ll long long 10 using namespace std; 11 struct Edge{ 12 int from,to,cap,flow,cost; 13 Edge(int u=0,int v=0,int c=0,int f=0,int w=0){ 14 from=u,to=v,cap=c,flow=f,cost=w; 15 } 16 }; 17 int n,m; 18 vector<Edge> edges; 19 vector<int> G[MAXN]; 20 int d[MAXN]; 21 int b[MAXN]; 22 int a[MAXN]; 23 int p[MAXN]; 24 void AddEdge(int u,int v,int cap,int cost){ 25 edges.push_back(Edge(u,v,cap,0,cost)); 26 edges.push_back(Edge(v,u,0,0,-cost)); 27 int t=edges.size(); 28 G[u].push_back(t-2); 29 G[v].push_back(t-1); 30 } 31 int SPFA(int s,int t,int &flow,ll &cost){ 32 memset(d,0x7f,sizeof(d)); 33 memset(b,0,sizeof(b)); 34 35 queue<int> q; 36 q.push(s); 37 b[s]=1; 38 d[s]=0; 39 a[s]=INF; 40 p[s]=0; 41 42 while(!q.empty()){ 43 int x=q.front(); q.pop(); 44 b[x]=0; 45 for(int i=0;i<G[x].size();i++){ 46 Edge& e=edges[G[x][i]]; 47 if(e.cap>e.flow&&d[e.to]>d[x]+e.cost){ 48 d[e.to]=d[x]+e.cost; 49 a[e.to]=min(a[x],e.cap-e.flow); 50 p[e.to]=G[x][i]; 51 if(!b[e.to]){ 52 b[e.to]=1; 53 q.push(e.to); 54 } 55 } 56 } 57 } 58 if(d[t]==INF){ 59 return 0; 60 } 61 62 flow+=a[t]; 63 cost+=1LL*a[t]*d[t]; 64 for(int x=t;x!=s;x=edges[p[x]].from){ 65 edges[p[x]].flow+=a[t]; 66 edges[p[x]^1].flow-=a[t]; 67 } 68 return 1; 69 } 70 ll MincostMaxflow(int s,int t){ 71 int flow=0; 72 ll cost=0; 73 while(SPFA(s,t,flow,cost)); 74 return cost; 75 } 76 void solve(){ 77 printf("%lld\n",MincostMaxflow(1,n+2)); 78 } 79 void init(){ 80 memset(a,0,sizeof(a)); 81 memset(p,0,sizeof(p)); 82 edges.clear(); 83 for(int i=0;i<=n;i++){ 84 G[i].clear(); 85 } 86 for(int i=1;i<=m;i++){ 87 int u,v,w;scanf("%d%d%d",&u,&v,&w); 88 u++,v++; 89 AddEdge(u,v,1,w); 90 AddEdge(v,u,1,w); 91 } 92 AddEdge(1,2,2,0); 93 AddEdge(n+1,n+2,2,0); 94 } 95 int main() 96 { 97 while(~scanf("%d%d",&n,&m)){ 98 init(); 99 solve(); 100 } 101 return 0; 102 }
转载于:https://www.cnblogs.com/w-h-h/p/7836241.html
POJ2135:Farm Tour相关推荐
- POJ-2135 Farm Tour 最小费用流
题目链接:http://poj.org/problem?id=2135 很容易看出来时最小费用流,但这里要注意是无向边,所以要建立两条边.为了满足退流时,花费还是最小,反向边的花费要为相反数. 1 / ...
- 骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)
说明:骑士旅游(Knight tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置? 解法:骑士的走法 ...
- 6.824:FaRM笔记
Spanner针对全球范围的分布式数据中心来实现高效的分布式事务,为了解决远距离的二阶段提交的巨大延迟,它通过让服务器间同步时钟来优化只读事务.经过优化后,一个读写型是事务根据数据中心的距离将花费10 ...
- POJ 2135 Farm Tour (费用流)
[题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...
- POJ - 2135 Farm Tour(最小费用最大流)
题目链接:点击查看 题目大意:给出一个由n个点和m条边组成的无向图,每条边都有权值,求点1->点n->点1的最短路,且要求每条路至多经过一次,并使得途径的权值和最小 题目分析:虽然题目要求 ...
- POJ 2135 Farm Tour 最小费用流
两条路不能有重边,既每条边的容量是1.求流量为2的最小费用即可. //#pragma comment(linker, "/STACK:1024000000,1024000000") ...
- POJ 2135 Farm Tour amp;amp; HDU 2686 Matrix amp;amp; HDU 3376 Matrix Again 费用流求来回最短路...
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...
- POJ 2135 Farm Tour (最小费用最大流)
Description 给出一张\(N\)个点\(M\)条边的带权无向图,结点编号从\(1\)到\(N\),求从\(1\)到\(N\)再到\(1\)的最短路,每条边最多走一次. Input 第一行给出 ...
- 转载:Hdu 题目分类
原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...
- 网络流:最小费用最大流问题
前置知识:最大流问题 最小费用最大流问题: 在最大流问题基础上,为每条边赋值单位流量的花费.求解保证最大流时,最小花费为多少.(因为最大流可以有多种流分配方案) 以EK算法为基础,在bfs时增加求最短 ...
最新文章
- 【MongoDB学习之一】初始MongoDB
- mysql多数据源切换_Springboot项目实现Mysql多数据源切换的完整实例
- 从 OSS 装载数据到 PostgreSQL
- 网络获取json数据并解析
- idea 创建 Maven+Hibernate项目
- Linux Tomcat 简介
- OpenCV极线epipolar lines的实例(附完整代码)
- Apache Spark:更改架构之前必须解决的5个陷阱
- 支付宝:“我的小程序”用户访问量一周激增165%
- python数据结构剑指offer-构建乘积数组
- c语言开发桌面应用合适吗,什么编程语言比较适合开发桌面应用程序?
- 颤抖吧,理科生们,让你们看看文科帝!
- 高德地图获取坐标距离_高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码
- 一份很哇塞的产品经理述职报告(附PPT下载)
- 如何检测时间序列中的异方差(Heteroskedasticity)
- 如何快速自动生成并定制报表
- 用C语言开发NES游戏(CC65) 简介
- 解决CUDA error: no kernel image is available for execution on the device
- aria2网页服务器错误,配置aria2服务器错误
- 记英语单词的有效方法就那么几个,别整一些花里胡哨的
热门文章
- version GLIBC_2.28 not found
- 坐高铁只能用身份证了?
- 为何吾博客周排名没有数字显示?
- 诚心劝言:自养动物不杀
- 正反物质相撞湮灭,是因为电荷因素吗?
- C中处理Python的Numpy数组的代码范例
- 64位程序如何调用32位dll(简单解决方案 )
- 360 android 应用市场,360应用市场
- mysql自带的全文索引_MySql全文索引详解
- python 怎么算l2范数_“火车过桥”“火车会车”和“火车超车”问题怎么解?图形很直观...