Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. There are m bidirectional
roads, each of whose connects some pair of cities.

To bake muffins in her bakery, Masha needs to establish flour supply from some storage. There are only k storages, located in different cities numbereda1, a2, ..., ak.

Unforunately the law of the country Masha lives in prohibits opening bakery in any of the cities which has storage located in it. She can open it only in one of another n - k cities, and, of course, flour delivery
should be paid — for every kilometer of path between storage and bakery Masha should pay 1 ruble.

Formally, Masha will pay x roubles, if she will open the bakery in some city b (ai ≠ b for
every 1 ≤ i ≤ k) and choose a storage in some city s (s = aj for some 1 ≤ j ≤ k)
and b and s are connected by some path of roads of summary length x (if there are more than one path, Masha is able to choose which of them
should be used).

Masha is very thrifty and rational. She is interested in a city, where she can open her bakery (and choose one of k storages and one of the paths between city with bakery and city with storage) and pay minimum possible
amount of rubles for flour delivery. Please help Masha find this amount.

Input

The first line of the input contains three integers nm and k (1 ≤ n, m ≤ 105, 0 ≤ k ≤ n) —
the number of cities in country Masha lives in, the number of roads between them and the number of flour storages respectively.

Then m lines follow. Each of them contains three integers uv and l (1 ≤ u, v ≤ n,1 ≤ l ≤ 109u ≠ v)
meaning that there is a road between cities u and v of length ofl kilometers .

If k > 0, then the last line of the input contains k distinct integers a1, a2, ..., ak(1 ≤ ai ≤ n) —
the number of cities having flour storage located in. If k = 0 then this line is not presented in the input.

Output

Print the minimum possible amount of rubles Masha should pay for flour delivery in the only line.

If the bakery can not be opened (while satisfying conditions) in any of the ncities, print  - 1 in the only line.

Example
Input
  1. 5 4 2
  2. 1 2 5
  3. 1 2 3
  4. 2 3 4
  5. 1 4 10
  6. 1 5
Output
  1. 3
Input
  1. 3 1 1
  2. 1 2 3
  3. 3
Output
  1. -1
Note

Image illustrates the first sample case. Cities with storage located in and the road representing the answer are darkened.

  1. //这一道题之前没有做出来的原因是不知道怎么处理最后输入的那一组数据
  2. //虽然之前做过图论题,但是这个类型的还是第一次做。
  3. //很显然,最后输入的那一组数据,这些点肯定在那n个点中,所以这是从指定点找到其他点的最短路径
  4. //那么这个指定点肯定是要特殊处理的点,前面已经给出了各个点之间的关系,所以要把最后输入的
  5. //特殊的点标记一下,而其他点不是特殊点,所以不用标记,然后从与这些特殊点有关的点的边中找到最短的
  6. //就是最后的答案,最后用一个for循环处理一下这m条路就行了,每次取特殊点到与其相连的点的最短路径
  7. #include<queue>
  8. #include<stack>
  9. #include<vector>
  10. #include<math.h>
  11. #include<stdio.h>
  12. #include<numeric>//STL数值算法头文件
  13. #include<stdlib.h>
  14. #include<string.h>
  15. #include<iostream>
  16. #include<algorithm>
  17. #include<functional>//模板类头文件
  18. using namespace std;
  19.  
  20. const int INF=0x3f3f3f3f;
  21. const int maxn=500100;
  22.  
  23. int n,m,k,b;
  24. int vis[maxn];
  25. struct node
  26. {
  27. int u,v,l;
  28. } a[maxn];
  29.  
  30. int main()
  31. {
  32. while(~scanf("%d %d %d",&n,&m,&k))
  33. {
  34. int i;
  35. memset(vis,0,sizeof(vis));
  36. for(i=0; i<m; i++)
  37. {
  38. scanf("%d %d %d",&a[i].u,&a[i].v,&a[i].l);
  39. }
  40. for(i=0; i<k; i++)
  41. {
  42. scanf("%d",&b);
  43. vis[b]=1;
  44. }
  45. int ans=INF;
  46. for(i=0; i<m; i++)
  47. {
  48. if(vis[a[i].u]&&!vis[a[i].v]) ans=min(ans,a[i].l);
  49. if(!vis[a[i].u]&&vis[a[i].v]) ans=min(ans,a[i].l);
  50. }
  51. if(ans==INF) printf("-1\n");
  52. else printf("%d\n",ans);
  53. }
  54. return 0;
  55. }

Bakery CodeForces - 707B (最短路的思路题)的更多相关文章

  1. CodeForces 606C--Sorting Railway Cars,思路题~~~

    C - Sorting Railway Cars   Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d &am ...

  2. Codeforces 701C. They Are Everywhere 思路题

    C. They Are Everywhere time limit per test: 2 seconds memory limit per test:256 megabytes input: sta ...

  3. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  4. Codeforces 828B Black Square(简单题)

    Codeforces 828B Black Square(简单题) Description Polycarp has a checkered sheet of paper of size n × m. ...

  5. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

  6. 51nod P1305 Pairwise Sum and Divide ——思路题

    久しぶり! 发现的一道有意思的题,想了半天都没有找到规律,结果竟然是思路题..(在大佬题解的帮助下) 原题戳>>https://www.51nod.com/onlineJudge/ques ...

  7. http://codeforces.com/gym/100623/attachments E题

    http://codeforces.com/gym/100623/attachments E题第一个优化它虽然是镜像对称,但它毕竟是一一对称的,所以可以匹配串和模式串都从头到尾颠倒一下第二个优化,与次 ...

  8. POJ 1904 思路题

    思路: 思路题 题目诡异地给了一组可行匹配 肯定有用啊-. 就把那组可行的解 女向男连一条有向边 如果男喜欢女 男向女连一条有向边 跑一边Tarjan就行了 (这个时候 环里的都能选 "增广 ...

  9. BZOJ 3252: 攻略(思路题)

    传送门 解题思路 比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次..其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的 ...

随机推荐

  1. 一个ASP.NET中使用的MessageBox类

    /// <summary> /// 自定义信息对话框 /// </summary> public class MessageBox { /// <summary> ...

  2. 开源中国愚人节网页变模糊的js blur代码

    <![if !IE]> <script> /* * by moli */ $(document).ready(function(){ if(document.cookie.in ...

  3. Try finally的一个实验和为什么避免重载 finalize()方法--例子

    public class TryFinallTest { public TryFinallTest(){ } public void runSomething(String str){ System. ...

  4. 51nod1773 A国的贸易

    基准时间限制:2 秒 空间限制:524288 KB 分值: 40  A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...

  5. 【洛谷 P3199】 [HNOI2009]最小圈(分数规划,Spfa)

    题目链接 一开始不理解为什么不能直接用\(Tarjan\)跑出换直接求出最小值,然后想到了"简单环",恍然大悟. 二分答案,把所有边都减去\(mid\),判是否存在负环,存在就\( ...

  6. Vue笔记之模板语法

    插值 比较常用的就是插值,插值就是{{ foobar }}用两个大括号包起来的一个变量,显示的时候会将双大括号标签替换为这个变量的值. 基本的用法就是: <p>{{ message }}& ...

  7. CSS实现箭头效果

    有时候网页中使用箭头以增强效果,一般的做法是使用图片,今天我们使用CSSCSS来实现“箭头效果”,使用CSS我们必须兼容所有浏览器(IE6.7.8.9.10.+),Chrome,Firefox,Ope ...

  8. docker使用现有容器生成新的镜像

    /*运行docker run后 --则进入该容器里了 我们做一些变更,比如安装一些东西 ,然后针对这个容器进行创建新的镜像 */ 基本形式: docker commit -m "change ...

  9. PHP深浅拷贝

    举个栗子: <?php class Example1 { public $name; public function __construct($name) { $this->name = ...

  10. 关于linux系统如何实现fork的研究(二)【转】

    转自:http://www.aichengxu.com/linux/7166015.htm 本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 前一篇关于li ...