[CSP-S模拟测试]:迷宫(最短路)
题目传送门(内部题123)
输入格式
输入文件的第一行为四个正整数$n,m,k,d$。
接下来$m$行,每行三个整数$u,v,w$,描述一条无向道路。
输入文件最后一行包含$k$个整数,为$p_0,p_1,...,p_{k-1}$。
输出格式
一行一个整数,表示最坏情况下走出迷宫的最短路径的长度。如果最坏情况下走不出迷宫,输出$-1$。
样例
样例输入:
3 4 1 1
0 1 1
0 1 2
1 2 1
1 2 2
2
样例输出:
4
数据范围与提示
对于$50\%$的数据,满足$m=n-1$。
对于$90\%$的数据,满足$n\leqslant 1,000,m\leqslant 100,000$。
对于$100\%$的数据,满足$3\leqslant n\leqslant 100,000,2\leqslant m\leqslant 1,000,000$,道路长度均为不超过$10^9$的正整数。
题解
对于$m=n-1$那$50$分,就是逗你开心的,你以为是棵树,然而却又可能有重边。
那就直接想正解吧。
转化一下题意,就是跑一个拿第$d+1$大的$dis[v]$转移$u$的最短路。
对于每一个点开一个堆就好了。
再讲个故事(你们都喜欢听我讲故事为什么?)
上午困的痛不欲生……
(痛不欲生可海星?)
刚考完试的我:“你们谁能$hack$一下我的算法,!@#$%^&*,大根堆,!@#$%^&*”。
台下一片沉默……
下午刚来到机房准备改题的我:唉,我大根堆呢?!

故事讲完啦~
时间复杂度:$\Theta(m\log n)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
struct rec{int nxt,to,w;}e[2000001];
int head[100001],cnt;
int n,m,k,d;
int a[100001];
bool vis[100001],is[100001];
long long dis[100001],ans=0x3f3f3f3f3f3f3f3f;
priority_queue<long long>dq[100001];
priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q;
void add(int x,int y,int w)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
e[cnt].w=w;
head[x]=cnt;
}
void Dij()
{
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=k;i++)dis[a[i]]=0;
while(q.size())
{
int x=q.top().second;q.pop();
if(vis[x])continue;vis[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
dq[e[i].to].push(dis[x]+e[i].w);
if(dq[e[i].to].size()>d)
{
if(dis[e[i].to]>dq[e[i].to].top())
{
dis[e[i].to]=dq[e[i].to].top();
q.push(make_pair(dis[e[i].to],e[i].to));
}
dq[e[i].to].pop();
}
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&k,&d);
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
u++;v++;add(u,v,w);add(v,u,w);
}
for(int i=1;i<=k;i++){scanf("%d",&a[i]);a[i]++;q.push(make_pair(0,a[i]));}
Dij();
if(dis[1]==0x3f3f3f3f3f3f3f3f)puts("-1");
else printf("%lld",dis[1]);
return 0;
}
rp++
[CSP-S模拟测试]:迷宫(最短路)的更多相关文章
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- Mockito:一个强大的用于Java开发的模拟测试框架
https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...
- NOIP模拟测试1(2017081501)
好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...
随机推荐
- PHP使用CURL抓取页面
cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php //1.初始化,创 ...
- Two strings CodeForces - 762C (字符串,双指针)
大意: 给定字符串$a$,$b$, $b$可以任选一段连续的区间删除, 要求最后$b$是$a$的子序列, 求最少删除区间长度. 删除一段连续区间, 那么剩余的一定是一段前缀和后缀. 判断是否是子序列可 ...
- 预约系统(二) MVC框架搭建
采用VS2013,自带的MVC4来搭建 MODEL层,表对象的建立: T_Bm.cs using System; using System.Collections.Generic; using Sys ...
- 构造器(Constructor)--构造函数
构造器是类型的成员之一,其他成员比如,成员字段,成员函数.狭义上,构造器指的是实例构造器(instance constructor) class Student { public int ID; pu ...
- .Net高并发解决思路
转自: 本文如有不对之处,欢迎各位拍砖扶正.另源码在文章最下面,大家下载过后先还原一下nuget包,需要改一下redis的配置,rabbitmq的配置以及Ef的连接字符串.另外使用的是CodeFirs ...
- ABCD 谁是小偷
题目: 警察局抓了a,b,c,d 4名偷窃嫌疑犯,其中只有一人是小偷.审问中,a说:“我不是小偷.”b说:“c是小偷.”c说:“小偷肯定是d.”d说:“c在胡说.” 现在已经知道这四人中有三人说的是真 ...
- idea安装完成后要做的几件事(设置字体、编码、行号)
1.设置字体大小和样式 打开设置:File-->Settings 看到如下界面,输入font,点击Editor目录下的Font设置字体大小和样式: Font:字体样式 size:字体大小 Fal ...
- 12、rpm
1.什么是rpm 由红帽开发用于软件包的安装 升级 卸载 查询 2.rpm包是什么样? 组成部分是什么样的? zip-3.0-11.el7.x86_64.rpm #el7 zip-3.0-1. el6 ...
- 借助Charles来测试移动端-上篇
随着现在互联网的兴起,移动端的测试需求越来越多,但是随着用户越来越多,迭代需求越来越频繁,或因为测试环境的接口不稳定,或因为多个业务系统互相关联,导致移动端测试后置,有时候提前介入了,也只能干耗时间, ...
- java8学习之比较器详解与类型推断特例
比较器详解: 这次来对比较器进行一个学习,比较器(Comparator)这个是在JDK1.2就提出的概念,只是说JAVA8针对它进行了一定的扩充,更加方便咱们使用,其中唯一的抽象方法如下: 而JAVA ...