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条边.每条边由起点,终点,长度组成. 分析: 求最小长度,还限 ...
随机推荐
- Oracle数据库高效sql语句的整理
业务需求说明:由于之前公司后台APP端有一个document表,该表中包含了所有的信息,新的需求就是通过该表创建出一个新的用户表(usertable)和一个档案表(document,该表只保留原doc ...
- 分析器错误 MvcApplication 找不到
<%@ Application Codebehind="Global.asax.cs" Inherits="test.MvcApplication" La ...
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...
- jQuery里ajax的用法
$.ajax({ type:'post',//这里页面数据发送请求的方式可以为post和get cache:'false ', //这里可以为false或者true 是否要缓存 ,默认为false u ...
- rpm软件包管理
RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证. 下面我们就来逐一的讲解吧. 一. 安装RPM包 RPM 软件包通常具有类似foo-1.0-1.i386.rp ...
- Oracle 10g提权测试
一直想摸索一下orcl提权的方式,今天测试了一下10g,可以成功提权. C:\wmpub>sqlplus scott/tiger@orcl SQL*Plus: Release 10.2.0.1. ...
- mybatis中的mapxml的语法
<select id="a" resultMap="map"> select * from `table` where (po_type='1') ...
- SQL数据库的十条命令
--(1)查询每个总学时数 select GradeId,SUM(classHour) from subject group by GradeId order by(SUM(classHour)) - ...
- MFC CPtrLink的使用
if (!m_SALink.IsEmpty()) { POSITION pos = m_SALink.GetHeadPosition(); for (int j = 0; j < m_SALin ...
- linux系统的初化始配置 IP 主机名 防火墙 selinux
本次内容包括Linux:ip.主机名.关闭firewalld与selinux 开机临时生效和永久生效 ------------------------------------------------- ...