描述


Hwz把YYB放到了一个迷宫之中,这个迷宫由n个节点构成,两个节点之间可能存在多条无向边,YYB的起点为1号节点,终点为n号节点。有m条无向边,对于每一条无向边,存在一个喋血值(∈N*,且≤100),即走过这条边的花费。另外,还有k个节点上有治疗药,即若YYB走到这个节点上时(不妨称这个点为治愈点),他身上所累积的喋血值会归零。YYB希望以最小的喋血值走完迷宫。

输入格式


第1行n,m,k分别表示有n个节点,m条无向边,以及k个治愈点。
第2行到m+1行 每一行有一个x,y,z表示x到y有一条喋血值为z的无向边
第n+2行 有k个整数,分别为治愈点的号数
PS:保证数据中没有负权回路。保证治愈点不重复。

输出格式


一行minblood 表示YYB走完迷宫的最小喋血值
当然,如果无法走出迷宫,输出Oh no!

Input
3 3 1
1 2 100
2 3 1
1 3 3
2

-

Output
1

Hint


范围:
对于100%的数据
1≤n≤5000,1≤k≤n,1≤m≤25000

-

题解


用并查集判断“回血点”与起点的连通性,若与起点连通则加一条边权为0的边连接回血点和起点。建好图后跑一遍SPFA求出最短路径。

代码


#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;const int MAXN=5000+10;
const int MAXM=25000+10;struct edge{int to,next,v;}e[MAXM*2];
int n,m,k,cnt,head[MAXN],fa[MAXN],dis[MAXN];
bool vis[MAXN];int find(int x){return x==fa[x] ? x:fa[x]=find(fa[x]);}inline void add(int _u,int _v,int _w)
{cnt++;e[cnt].to=_v;e[cnt].v=_w;e[cnt].next=head[_u];head[_u]=cnt;
}void spfa(int s)
{memset(vis,0,sizeof(vis));memset(dis,0x3f,sizeof(dis));queue<int>q;while(!q.empty()) q.pop();q.push(s);dis[s]=0;vis[s]=true;while(!q.empty()){int t=q.front();q.pop();vis[t]=false;for(int i=head[t];i;i=e[i].next){int temp=e[i].to;if(dis[temp]>dis[t]+e[i].v){dis[temp]=dis[t]+e[i].v;if(!vis[temp]){vis[temp]=true;q.push(temp);}}}}
}int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++) {int u,v,w;scanf("%d%d%d",&u,&v,&w);add(u,v,w);add(v,u,w);if(find(u)!=find(v)) fa[fa[u]]=v;}if(find(1)!=find(n)) {printf("Oh no!\n");return 0;}int kx;for(int i=1;i<=k;i++){scanf("%d",&kx);if(find(kx)==find(1)) add(1,kx,0);}spfa(1);printf("%d\n",dis[n]);return 0;
}

Vijos1767-YYB喋血相关推荐

  1. Vijos1767YYB喋血题解

    来源 https://vijos.org/p/1767 描述 Hwz把YYB放到了一个迷宫之中,这个迷宫由n个节点构成,两个节点之间可能存在多条无向边,YYB的起点为1号节点,终点为n号节点.有m条无 ...

  2. 六年前的回忆——万人喋血的古文及古文翻译

    作者:蛋操鹰 提交日期:2004-10-22 13:14:00 六年前我即将大学毕业.大学的生活总是挺无聊的--怎么说呢,似乎是泛着淡淡灰色的七彩.难得有件动人心魄的事情,却总与风月无干. 那是一 ...

  3. [电影]吴宇森之《喋血街頭》

    这部电影我居然没有看过,更夸张的是居然没有听说过. 看来是有点土了. 2个小时的片子看完,感觉还不过瘾. 而且居然有这个mm,惊喜了一下: 关于<喋血街头>,吴宇森说:"我常觉得 ...

  4. 线段树 by yyb

    线段树 by yyb Type1 维护特殊信息 1.[洛谷1438]无聊的数列 维护一个数列,两种操作 1.给一段区间加上一个等差数列 2.单点询问值 维护等差数列 不难发现,等差数列可以写成\(ad ...

  5. yyb博客的几道神仙题

    该比赛链接 T5 题意: 给你一个\(n\times n\)的网格,开始有\(m\)个被涂成黑色的格子,如果存在三个格子\((x,y)\),\((y,z)\),\((z,x)\)满足\((x,y)\) ...

  6. yyb要填的各种总结的坑

    已经写好啦的 如果有没有找到的东西,可以戳这里找找qwq 莫比乌斯反演&杜教筛 动态点分治 另外一个动态点分治 斜率优化 Splay 莫队 凸包 旋转卡壳 Manacher算法 Trie树 A ...

  7. c++builder实现文件拖拽与U盘复制---YYB原创(转载请注明出处)

    在这里我们使用到了一个API函数:DragQueryFile,它的原型如下: UINT DragQueryFile(    HDROP hDrop,    UINT iFile,    LPTSTR ...

  8. 辣鸡HellPix刷yyb网络流题单(orz yyb)

    题目 评价 状态 [USACO4.2]草地排水Drainage Ditches(最大流)  最大流模板 Accepted HDU 3416 Marriage Match IV(最短路,网络流)  最小 ...

  9. yyb省选前的一些计划

    突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...

最新文章

  1. 使用selenium+phantomJS实现网页爬取
  2. [python学习] 专题九.Mysql数据库编程基础知识
  3. 理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos
  4. win7电脑0x000007b蓝屏怎么办
  5. 【Hbase】HBase 更改表名
  6. 快准狠才叫爽!六款智能电视语音识别大比拼
  7. 201521123070 《JAVA程序设计》第6周学习总结
  8. 在vue中后台返回的文本包含标签时候解析为html代码
  9. java zinterstore_Java架构之Redis系列:通过文章点赞排名案例学习Sortedset命令
  10. 如何在WIN10 64位操作系统上安装STEP7 V5.5
  11. 邯郸三中高考2021成绩查询,邯郸2021年中考统考成绩
  12. java math.min_Java Math.min() 方法
  13. 33张你没看过的酷炫化学动图, 秒懂化学反应原理!
  14. c语言中=是什么意思,c语言中==是什么意思?
  15. 汇编语言(32位二进制数的减法、带符号数除法、字符串大小写转换、分段函数求值,含源程序)
  16. c++中Const,Const函数,Const变量,函数后面的Const
  17. python代码如何加密
  18. hdl-grap-slam 运行以及编译
  19. 图像处理中的傅立叶变换
  20. python技术书《Real World Python for learnner 大蟒本色》

热门文章

  1. Java注解之Retention、Documented、Target介绍
  2. 自动驾驶做“双碳”目标下的现实主义者
  3. FMD的FT61F022A单片机技术资料规格
  4. mysql怎么模糊查询_MySql 模糊查询
  5. mysql 姓刘或姓李_“老子姓李”和“高祖是刘”
  6. 我的办公助手(OfficeAssist) V0.1: 一个能查看农历和节假日的小工具,带提醒功能
  7. Ajax学习笔记--- 【xmind 详细展示 浏览器与 服务器端通信,请求与响应报文】
  8. PostgreSql 复杂的查询,我可怎么分析 (神奇的web site)
  9. highchart地图
  10. 关于请求被挂起页面加载缓慢问题的追查(stalled 时间过长)