POJ - 3268 单源最短路
题意:给定一些有向边,以及一个目的地,从某个点到达目的地,再从目的地回到那个点。共有n个点,问这n个点花费最大是多少?
思路:从目的地回去直接把目的地作为源点即可。那么从某个点到达目的地应该如何得到最小花费?假设1-2-3,3作为目的地,可以看做3-2-1,即把所有边逆转,以目的地作为源点,即可求得所有点到目的地的最短距离。
AC代码
#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 1000 + 5;
int d1[maxn], d2[maxn], vis[maxn];
int n, m, goal;
vector<int>G[maxn];
struct Edge{
int from, to, dist;
Edge() {}
Edge(int u, int v, int d):from(u), to(v), dist(d){}
};
vector<Edge>edges, rever;
void add_eage(int u, int v, int cost) {
edges.push_back(Edge(u, v, cost));
int m = edges.size();
G[u].push_back(m-1);
}
struct node{
int d, u;
node(){}
node(int d, int u):d(d), u(u){}
bool operator < (const node &p) const {
return d > p.d;
}
};
void dijkstra(int s, int d[]) {
priority_queue<node>q;
d[s] = 0;
memset(vis, 0, sizeof(vis));
q.push(node(0, s));
while(!q.empty()) {
node p = q.top(); q.pop();
int u = p.u;
if(vis[u]) continue;
vis[u] = 1;
for(int i = 0; i < G[u].size(); ++i) {
Edge &e = edges[G[u][i]];
if(d[u] + e.dist < d[e.to]) {
d[e.to] = d[u] + e.dist;
q.push(node(d[e.to], e.to));
}
}
}
}
void init() {
for(int i = 1; i <= n; ++i) G[i].clear();
edges.clear();
}
int main() {
while(scanf("%d%d%d", &n, &m, &goal) == 3) {
init();
int u, v, cost;
rever.clear();
for(int i = 0; i < m; ++i) {
scanf("%d%d%d", &u, &v, &cost);
rever.push_back(Edge(v, u, cost));
add_eage(u, v, cost);
}
memset(d1, inf, sizeof(d1));
dijkstra(goal, d1);
init();
for(int i = 0; i < rever.size(); ++i) {
int u = rever[i].from, v = rever[i].to, cost = rever[i].dist;
add_eage(u, v, cost);
}
memset(d2, inf, sizeof(d2));
dijkstra(goal, d2);
int ans = 0;
for(int i = 1; i <= n; ++i) {
ans = max(d1[i]+d2[i], ans);
}
printf("%d\n", ans);
}
return 0;
}
如有不当之处欢迎指出!
POJ - 3268 单源最短路的更多相关文章
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- 用scheme语言实现SPFA算法(单源最短路)
最近自己陷入了很长时间的学习和思考之中,突然发现好久没有更新博文了,于是便想更新一篇. 这篇文章是我之前程序设计语言课作业中一段代码,用scheme语言实现单源最段路算法.当时的我,花了一整天时间,学 ...
- 单源最短路_SPFA_C++
当我们需要求一个点到其它所有点的最短路时,我们可以采用SPFA算法 代码特别好写,而且可以有环,但是不能有负权环,时间复杂度是O(α(n)n),n为边数,α(n)为n的反阿克曼函数,一般小于等于4 模 ...
- 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)
题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结
刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...
- PAT All Roads Lead to Rome 单源最短路
思路:单源最短路末班就好了,字符串映射成数字处理. AC代码 //#define LOCAL #include <stdio.h> #include <string.h> #i ...
随机推荐
- pycharm python模版样式
问题: 我想在创建新的一些python程序的时候,希望在新文件开头添加python版本声明和一些关于时间相关的模版数据 那,如何解决? 1. pycharm ---> setting ---&g ...
- python_如何快速找打字典中公共key
场景实例: 西班牙足球联赛,每轮球员进球统计: 第一轮:{'1':1,'2':4,'5':2,'7':3} 第一轮:{'2':1,'5':4,'6':2,'3':3} 第一轮:{'1':1,'4':4 ...
- Python程序的执行方式
Python代码有两种执行方式: 一.文件执行 二.交互器执行(推荐) 一.文件执行 1.用 notepad++ 或 Sublime Text,甚至 写字本创建一个文件. 2.比如:print('He ...
- java里程碑之泛型--类型通配符
1,泛型与数组在子类上面的对比 在整理java泛型的类型通配符之前,我们先来研究下java在数组设计上的一个不合理.我们来看下面代码: public class Test { public stati ...
- RChain节点通信机制(上)
在介绍RChain的通信机制之前,先简单介绍一些以太坊的通信机制,它包括以下几个方面,如下详细了解以太坊的通信机制,可以查看https://github.com/ethereum/devp2p/blo ...
- Linux学习笔记一
本文记录了Linux中常用的一些东西. 命令生效顺序 第一顺位执行绝对路径或者相对路径的命令 第二顺位执行别名 第三顺位执行Bash的内部命令 第四顺位执行按照$PATH环境变量设置定义的目录顺序的第 ...
- 服务器开发之CGI后门
1.html代码 <form id = "form" name="form" method="post" action=". ...
- JAVA并发编程学习笔记------协作对象之间发生的死锁
一. 如果在持有锁时调用某个外部方法,那么将出现活跃性问题.在这个外部方法中可能会获取其他锁(这可能会产生死锁),或者阻塞时间过长,导致其他线程无法及时获得当前被持有的锁.如下代码: public c ...
- HTML基础知识概括
1.html的概念 HTML是用来描述网页的一种语言. HTML指的是超文本标记语言(HyperText Markup Language) HTML不是一种编程语言,而是一种标记语言(markup l ...
- ABAP更换请求
当创建的程序或表操作失误存储在其他的请求下边如何更换请求呢? 事务代码:SE09 双击请求号,复制存储错误的对象 打开一个新窗口,双击正确的请求,点击修改,将复制的对象粘贴在正确的请求下 将错误的请求 ...