Metropolis

https://www.nowcoder.com/acm/contest/203/I

题目描述

魔方国有n座城市,编号为。城市之间通过n-1条无向道路连接,形成一个树形结构。
在若干年之后,其中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

≤ n,1 ≤ l

≤ 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

-->

示例1

输入

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(多源点最短路)的更多相关文章

  1. 牛客国庆集训派对Day3 I Metropolis

    Metropolis 思路: 多源点最短路 只要两个不同源点的最短路相遇,我们就更新两个源点的答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3 ...

  2. 最短路模板|堆优化Dijkstra,SPFA,floyd

    Ⅰ:Dijkstra单源点最短路 1.1Dijkstra const int MAX_N = 10000; const int MAX_M = 100000; const int inf = 0x3f ...

  3. 【NOIP复习】最短路总结

    [模板] /*堆优化Dijkstra*/ void dijkstra() { priority_queue<pair<ll,int>,vector<pair<ll,int ...

  4. 沈阳网络赛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 ...

  5. POJ 3268 Silver Cow Party(最短路&Dijkstra)题解

    题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径 思路:用Floyd超时的,这里用的Dijkstra. Dijkstra感觉和Prim和Kruskal的思路很像啊.我们把 ...

  6. 关于dijkstra的优化 及 多源最短路

    先来看这样一道题目 给你N个点,M条双向边,要求求出1号点到其他所有点的距离.其中 2 <= N <= 1e5,  1 <=M <= 1e6. 对于这样的一道题目 我们当然不可 ...

  7. 最短路算法 Dijkstra 入门

    dijkstra算法 是一种单源点最短路算法求出一个点到其他所有点的最短路. 给你这样的一个图,需要求出1号点到其他点的最短距离是多少. 首先我们开一个数组 d[N],d[x] 代表着从起点出发到x点 ...

  8. 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA

    今天是算法数据结构专题的第33篇文章,我们一起来聊聊最短路问题. 最短路问题也属于图论算法之一,解决的是在一张有向图当中点与点之间的最短距离问题.最短路算法有很多,比较常用的有bellman-ford ...

  9. xf浅谈_最短路

    最短路问题(short-path problem):最短路问题是图论研究中的一个经典算法问题,指在寻找图(由结点和路径组成的)中两结点之间的最短路径.算法具体的形式包括: 1.确定起点的最短路径问题 ...

随机推荐

  1. python selenium-1 环境搭建new

    1.Mac安装Anaconda集成环境 集成环境有助于快速编写脚本. 将安装的python3版本设置为python,系统的python更改为python2 Anaconda地址 https://www ...

  2. vcenter修改用户密码的方法

    https://192.168.x.x:9443登录,必须用administrator@vsphere.local登录,不能用root用户登录. 主页-系统设置- Single Sing-On-用户和 ...

  3. pip安装包(python安装gevent(win))

    下载: https://www.lfd.uci.edu/~gohlke/pythonlibs/#greenlet greenlet greenlet-0.4.14-cp36-cp36m-win_amd ...

  4. 关于Mongodb的全面总结

    MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...

  5. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  6. controller检查header

    以前都只能拿到request再检查,其实有相应的注解. public Result updateRecentScore(@RequestBody Map map, @RequestHeader(&qu ...

  7. eclipse中添加aptana插件(html.css.js自动提示)

    一.关于aptana aptana是一款很不错的插件,本人主要用于安装此类插件,在eclipse中用于编辑javascript代码,html代码,和css代码的,因为其有自动纠错功能,当然安装后的问题 ...

  8. as3 区别中文 英文 数字

    1)英文a-z是65-90,A-Z是97-112 2)数字是0-9是,48-57 3)上万的都是中文字符 var str:String = "hello world! 你好世界! 88!&q ...

  9. Effective C++笔记——day01

    1.当我们看到赋值符号时,请小心,因为"="也可以用来调用copy构造函数 Widget w3 = w2; //调用copy构造函数,而不是copy赋值操作符 2.不明确的行为: ...

  10. To zero

    Let bygone be bygone. Now  everything changed. In fact, everything occurs to me cause I am a loser i ...