Metropolis(多源点最短路)
Metropolis
https://www.nowcoder.com/acm/contest/203/I
题目描述
在若干年之后,其中p座城市发展成了大都会,道路的数量也增加到了m条。
大都会之间经常有贸易往来,因此,对于每座大都会,请你求出它到离它最近的其它大都会的距离。
输入描述:
第一行三个整数n,m,p (1 ≤ n,m ≤ 2*10
5
,2 ≤ p ≤ n),第二行p个整数
表示大都会的编号 (1≤ x
i
≤ n)。接下来m行每行三个整数a
i
,b
i
,l
i
表示一条连接a
i
和b
i
,长度为l
i
的道路 (1 ≤ a
i
,b
i
≤ n,1 ≤ l
i
≤ 10
9
)。
保证图是连通的。
输出描述:
输出一行p个整数,第i个整数表示x
i
的答案。
输入例子:
5 6 3
2 4 5
1 2 4
1 3 1
1 4 1
1 5 4
2 3 1
3 4 3
输出例子:
3 3 5
-->
输入
5 6 3
2 4 5
1 2 4
1 3 1
1 4 1
1 5 4
2 3 1
3 4 3
输出
3 3 5
#include<iostream>
#include<cmath>
#include<vector>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 200005
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
using namespace std; vector<pair<int,ll> >ve[maxn];
int n,p;
int a[maxn],bel[maxn];///离哪个大都会最近
ll dis[maxn];
int vis[maxn];
ll ans[maxn];///求离自己最近的大都会的距离
struct sair{
int pos;
ll len;
friend bool operator<(sair a,sair b){
return a.len>b.len;
}
};
void Dijstra(){
for(int i=;i<=n;i++){
dis[i]=INF;
ans[i]=INF;
vis[i]=;
}
sair s,e;
int pos;
ll len;
priority_queue<sair>Q;
for(int i=;i<=p;i++){
s.len=,s.pos=a[i];
Q.push(s);
dis[a[i]]=;
bel[a[i]]=a[i];
}
while(!Q.empty()){
s=Q.top();
Q.pop();
if(!vis[s.pos]){
vis[s.pos]=;
for(int i=;i<ve[s.pos].size();i++){
pos=ve[s.pos][i].first;
len=ve[s.pos][i].second;
if(dis[pos]>dis[s.pos]+len){
dis[pos]=dis[s.pos]+len;
bel[pos]=bel[s.pos];
e.len=dis[pos];
e.pos=pos;
Q.push(e);
}
else if(bel[pos]!=bel[s.pos]){
///当两个城市属于不同的大都会时,A地到B地的最近距离为A地到K地再到B地的距离
ans[bel[pos]]=min(ans[bel[pos]],dis[pos]+dis[s.pos]+len);
ans[bel[s.pos]]=min(ans[bel[s.pos]],dis[pos]+dis[s.pos]+len);
}
}
}
} } int main(){
std::ios::sync_with_stdio(false);
int m;
cin>>n>>m>>p;
for(int i=;i<=p;i++){
cin>>a[i];
}
int aa,bb,vv;
while(m--){
cin>>aa>>bb>>vv;
ve[aa].push_back(make_pair(bb,vv));
ve[bb].push_back(make_pair(aa,vv));
}
Dijstra();
for(int i=;i<=p;i++){
if(i!=){
cout<<" ";
}
cout<<ans[a[i]];
}
cout<<endl;
}
Metropolis(多源点最短路)的更多相关文章
- 牛客国庆集训派对Day3 I Metropolis
Metropolis 思路: 多源点最短路 只要两个不同源点的最短路相遇,我们就更新两个源点的答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3 ...
- 最短路模板|堆优化Dijkstra,SPFA,floyd
Ⅰ:Dijkstra单源点最短路 1.1Dijkstra const int MAX_N = 10000; const int MAX_M = 100000; const int inf = 0x3f ...
- 【NOIP复习】最短路总结
[模板] /*堆优化Dijkstra*/ void dijkstra() { priority_queue<pair<ll,int>,vector<pair<ll,int ...
- 沈阳网络赛D-Made In Heaven【k短路】【模板】
One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. However, Pucci ...
- POJ 3268 Silver Cow Party(最短路&Dijkstra)题解
题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径 思路:用Floyd超时的,这里用的Dijkstra. Dijkstra感觉和Prim和Kruskal的思路很像啊.我们把 ...
- 关于dijkstra的优化 及 多源最短路
先来看这样一道题目 给你N个点,M条双向边,要求求出1号点到其他所有点的距离.其中 2 <= N <= 1e5, 1 <=M <= 1e6. 对于这样的一道题目 我们当然不可 ...
- 最短路算法 Dijkstra 入门
dijkstra算法 是一种单源点最短路算法求出一个点到其他所有点的最短路. 给你这样的一个图,需要求出1号点到其他点的最短距离是多少. 首先我们开一个数组 d[N],d[x] 代表着从起点出发到x点 ...
- 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
今天是算法数据结构专题的第33篇文章,我们一起来聊聊最短路问题. 最短路问题也属于图论算法之一,解决的是在一张有向图当中点与点之间的最短距离问题.最短路算法有很多,比较常用的有bellman-ford ...
- xf浅谈_最短路
最短路问题(short-path problem):最短路问题是图论研究中的一个经典算法问题,指在寻找图(由结点和路径组成的)中两结点之间的最短路径.算法具体的形式包括: 1.确定起点的最短路径问题 ...
随机推荐
- 【转载】如何在 Github 上发现优秀的开源项目?
之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Git ...
- 学习URL地址(待整理)
编程开发教程:http://www.runoob.com/ ElasticSearch教程:https://es.xiaoleilu.com/index.html 设计模式:http://www.cn ...
- 【转载】Docker 经验之谈
本文来源:Ghostcloud原创 对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头.体验到它的强大性能之后,相信大家最终是无法抵挡其魅力的.容器技术能够解 ...
- Python和Signal
先简单说一下Signal是啥.(如果想直接使用可以不看) Signal翻译过来中文就是信号- - 当然, 本身他就是Linux系统编程中非常重要的概念, 信号机制是进程之间传递消息的一种机制, 其全称 ...
- HFDS核心技术
HDFS 设计的前提与目标 HDFS体系结构1 HDFS体系结构2 HDFS特性与优点 高容错性保障机制 HDFS不适合的场景 HDFS2.0的新特征 HA-QJM Federation 快照 异构层 ...
- solr4.x之原子更新
solr4.x发布以后,最值得人关注的一个功能,就是原子更新功能,传说的solr是否能真正的做到像数据库一样,支持单列更新呢? 在solr官方的介绍中,原子更新是filed级别的更新,不会涉及整个Do ...
- WinRAR 代码执行漏洞复现
影响版本: WinRAR < 5.70 Beta 1 Bandizip < = 6.2.0.0 好压(2345压缩) < = 5.9.8.10907 360压缩 & ...
- Java的this和super总结
内容: 1.this和super作用 2.继承关系图 1.this和super作用 this和super的作用: this:区分本类中的成员变量和局部变量同名的情况,代指本类 super:区分子类中的 ...
- 发送短信验证码及调用短信接口与C# 后台 post 发送
#region 调用短信接口 public ActionResult Mobile(string Tel)//调用接口 { Random rm = new Random(); int i; strin ...
- J2SE 8的输入输出--Path/Paths File/Files; FileSystems 类的用法
Path的简单用法 //1. Path 正常用法 Path path = Paths.get("src/main/resource/zip"); logger.debug(path ...