UVa10806 Dijkstra,Dijkstra-费用网络流
Problem, in short Given a weighed, undirected graph, find the shortest path from S to T and back without using the same edge twice.
很基础的费用网络流
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> #define LL long long #define maxn 1024 using namespace std; <<; struct Edge{ int from,to,dist,flow,cap; }; int n,m,d[maxn],a[maxn],inq[maxn],p[maxn]; vector<Edge> edges; vector<int> G[maxn]; void addEdge(int from,int to,int dist){ edges.push_back((Edge){,}); edges.push_back((Edge){to,,}); int m=edges.size(); G[); G[to].push_back(m-); } void connect(){ edges.push_back((Edge){,n+,,,}); edges.push_back((Edge){n+,,,,}); int m=edges.size(); G[].push_back(m-); G[n+].push_back(m-); edges.push_back((Edge){n+,,,,}); edges.push_back((Edge){,n+,,,}); m+=; G[n+].push_back(m-); G[].push_back(m-); edges.push_back((Edge){n,n+,,,}); edges.push_back((Edge){n+,n,,,}); m+=; G[n].push_back(m-); G[n+].push_back(m-); edges.push_back((Edge){n+,n,,,}); edges.push_back((Edge){n,n+,,,}); m+=; G[n+].push_back(m-); G[n].push_back(m-); } bool BF(int s,int t,int &flow,int &cost){ memset(inq,,sizeof(inq)); ;i<=n+;i++) d[i]=inf; inq[s]=;d[s]=;a[s]=inf; queue<int> Q; Q.push(s); while(!Q.empty()){ int u=Q.front();Q.pop(); inq[u]=; ;i<G[u].size();i++){ Edge &e=edges[G[u][i]]; if(e.cap>e.flow&&d[e.to]>d[u]+e.dist){ d[e.to]=d[u]+e.dist; a[e.to]=min(a[u],e.cap-e.flow); p[e.to]=G[u][i]; if(!inq[e.to]){ inq[e.to]=; Q.push(e.to); } } } } if(d[t]>=inf) return false; flow+=a[t]; cost+=a[t]*d[t]; int u=t; for(;u!=s;u=edges[p[u]].from){ edges[p[u]].flow+=a[t]; edges[p[u]^].flow-=a[t]; } return true; } void init(){ edges.clear(); ;i<=n+;i++) G[i].clear(); } int main() { while(scanf("%d",&n)&&n){ scanf("%d",&m); init(); int x,y,d; ;i<=m;i++){ scanf("%d%d%d",&x,&y,&d); addEdge(x,y,d);addEdge(y,x,d); } connect(); ,cost=; ,n+,flow,cost)); ){ puts("Back to jail"); }else{ printf("%d\n",cost); } } ; }
UVa10806 Dijkstra,Dijkstra-费用网络流的更多相关文章
- UVa 10806 Dijkstra,Dijkstra(最小费用最大流)
裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...
- HDU 6611 K Subsequence(Dijkstra优化费用流 模板)题解
题意: 有\(n\)个数\(a_1\cdots a_n\),现要你给出\(k\)个不相交的非降子序列,使得和最大. 思路: 费用流建图,每个点拆点,费用为\(-a[i]\),然后和源点连边,和后面非降 ...
- uva 10806 Dijkstra, Dijkstra. (最小费最大流)
uva 10806 Dijkstra, Dijkstra. 题目大意:你和你的伙伴想要越狱.你的伙伴先去探路,等你的伙伴到火车站后,他会打电话给你(电话是藏在蛋糕里带进来的),然后你就能够跑去火车站了 ...
- 【最小费用最大流模板】【Uva10806+Spring Team PK】Dijkstra, Dijkstra,
题意:从1到n 再从n到1 不经过重复的边 ,(如果是点就是旅行商问题了),问最短路 建立一个超级源S S到1连一条费用为0,容量为2的边,求费用流即可 如果流<2 那么hehe 否则 输 ...
- UVA-10806 Dijkstra, Dijkstra. (最小费用流,网络流建模)
题目大意:给一张带权简单图,找出一条经过起点s和终点t的最小回路. 题目分析:建立网络,以s为源点,t为汇点,另每条边的容量为1,单位费用为边权值.求最小费用流,增广两次后的最小费用便是答案. 代码如 ...
- dijkstra 最小费用最大流
前言:众所周知:spfa他死了 滑稽 dijkstra同样为最短路算法,为什么不能跑费用流qwq 好像是因为有负权边的缘故 但是如果我们如果使用某种玄学的将边权都拉回到正数的话 就可以跑了dijkst ...
- UVA 10806 Dijkstra, Dijkstra.(费用流)
n个点的无向带权图,求1->n的最短往返路径,不走重复边. 这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流. 而求1->n最短往返路径呢?增加源点s,由s到1加弧, ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- UVA 10806 Dijkstra, Dijkstra.
题意: 从起点走到终点,然后从终点走到起点,其中不能同时走过相同的一条边,问你最小路径长度.先输入终点n,起点为1,接下来输入m,代表有m条边.每条边由起点,终点,长度组成. 分析: 求最小长度,还限 ...
随机推荐
- ubuntu 13.04 tftp服务器建立
本文参考博文:http://blog.chinaunix.net/uid-20718037-id-3194493.html 用tftp下载就需要要我们的主机上先安装tftp服务器. 1.安装软件 ...
- Python开发入门与实战9-基于vs的集成开发环境
9. 基于visual studio的Python的集成开发环境 上一章我们描述了如何安装使用Java的集成开发环境Eclipse IDE,本章我们来说明另一种集成开发环境,也是笔者多年的开发习惯使用 ...
- Android 开源组件 ----- Android LoopView无限自动轮转控件
Android 开源组件 ----- Android LoopView无限自动轮转控件 2015-12-28 15:26 by 杰瑞教育, 32 阅读, 0 评论, 收藏, 编辑 一.组件介绍 App ...
- GCD下的几种实现同步的方式
GCD多线程下,实现线程同步的方式有如下几种: 1.串行队列 2.并行队列 3.分组 4.信号量 实例: 去网上获取一张图片并展示在视图上. 实现这个需求,可以拆分成两个任务,一个是去网上获取图片,一 ...
- Android中SQLite下 Cursor的使用。
引自博客大神一篇文 地址: http://blog.sina.com.cn/s/blog_15e2abdd90102wcdu.html rawQuery()方法用于执行select语句. /* ...
- 关于CSS reset
关于CSS resetCSS reset(css重置)基本上是不需要的,至少可以说80%的的CSS reset都是没有必要的,反而增加了页面CSS 的overwrite,尤其像开心网*{margin: ...
- AngularJS从构建项目开始
AngularJS从构建项目开始 AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀web前端框 ...
- 多个微信菜单都需要获取openId的时候如何处理回调页面的问题
1.要建立一个特殊的页面处理这个逻辑 if (taskClassId == "6027") { Response.Redirect("./ProductAdvice.as ...
- OC 属性
1 属性和实例变量 :属性 == 实例变量声明 + setter 方法+ getter 方法 在老版本的 OC 语言中,我们需要同时声明属性和底层实例变量,那时,属性是 OC 语言的一个新的机制,并 ...
- CF 628B New Skateboard --- 水题
CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...