题目


每天 BBS 都要从家里经过城市中的一段路到学校刷五三。城市中一共有 n 个路口
和 m 条双向道路,每条双向道路都连接着两个路口 a i 、b i 且有一定的时间花费 v i 。BBS
家编号为 1,学校编号为 n。今天,BBS 由于个人卫生综合征导致他很迟才离开家,他
想用膜法改变 k 条道路的长度使通过其的时间花费 v i 变为 0。现在他问你改变道路长度
之后他到学校的最小时间花费是多少?
输入格式:
第一行为三个整数 n、m、k,接下来的 m 行每行三个整数 a i ,b i ,v i ,分别表示这条路连
着的两个路口和通过其所用的时间。
输出格式:
一个整数,表示 BBS 到学校的最小时间花费。

样例解释:
更新 3->4 的道路,最短路线为 1->3->4,用时为 1+0=1。
数据范围:
对于 100%的数据:1<=n<=10000,1<=m<=50000,1<=k<=20,1<=v i <=1000000。

题解


题意还是比较易懂的。给定一个无向图,可以把k条路的长度变为0,求1到n的最短路。

这题似乎没有部分分……那就讲正解吧。

插播:话说这题是有原题的:(BZOJ2763)[JLOI2011]飞行路线。

这题的正解是分层图最短路。

建立一个有k+1个层的图,每次将花费变为0,层数+1,初始0层,最多k层,所以最多减少k条路。(当然,一条路减少多次是没有意义的)

在实际应用时,由于图是一样的,只需要分别记录这k层中每层n个点到1号点的最短路(代码中的d数组)和访问情况(代码中的vis数组)即可。

还有,一定要用dijkstra!一定要用dijkstra!一定要用dijkstra!用spfa会T!(某巨神就中招了……)

代码


 #include <stdio.h>
#include <string.h>
#include <queue>
#define N 10005
#define K 22
using namespace std;
int n,m,k,d[N][K];char vis[N][K];
int ne=,h[N];struct edge{int to,w,x;}e[];
inline void ins(int s,int t,int w) {
e[++ne].to=t;e[ne].w=w;e[ne].x=h[s];h[s]=ne;
}
struct node {
int a,l,dis;
bool operator<(const node &b)const {
return dis>b.dis;
}
};
priority_queue<node> q;
inline void tt(int a,int l,int p) {
if(!vis[a][l]&&d[a][l]>p) {
d[a][l]=p;
q.push({a,l,p});
}
}
void dijkstra() {
node u;edge v;
memset(d,,sizeof(d));
d[][]=;
q.push({,,});
while(!q.empty()) {
u=q.top();q.pop();
vis[u.a][u.l]=;
for(int i=h[u.a];i;i=v.x) {
v=e[i];
tt(v.to,u.l,u.dis+v.w);
if(u.l<k) tt(v.to,u.l+,u.dis);
}
}
}
int main() {
int a,b,c;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<m;++i) {
scanf("%d%d%d",&a,&b,&c);
ins(a,b,c);ins(b,a,c);
}
dijkstra();
a=d[n][];
for(int i=;i<=k;++i) if(d[n][i]<a) a=d[n][i];
printf("%d",a);
return ;
}

2017-9-24模拟赛T1 个人卫生综合征(school.*)的更多相关文章

  1. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  2. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  3. 【2019.7.24 NOIP模拟赛 T1】道路建设(road)(水题)

    原题与此题 原题是一道神仙不可做题,两者区别在于,原题不能有重边和自环. 然而,这题可以有重边... 于是这题就变成了一道大水题. 此题的解法 考虑如何构造. 对于\(n\le10^4\)的情况: 对 ...

  4. [NOIP2018校模拟赛]T1 阶乘

    题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...

  5. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  6. [模拟赛] T1 高级打字机

    Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...

  7. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  8. [NOIP2018校模拟赛]T1聚会 party

    题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...

  9. 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

    二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...

随机推荐

  1. C语言的三目运算符

    语法: 表达式1 ? 表达式2 : 表达式3; 等价于 if(表达式1) { 表达式2 } else { 表达式3 }

  2. C#_计算目前时间到指定的周X、指定的时间X 还有多少秒

    比如:当前时间到下周二 05:00:00还剩下多少秒? /// <summary> /// 计算距离下一个 周XX XX时XX分XX秒,还剩下多少秒 /// </summary> ...

  3. GoodNotes如何删除文档的某一页

    1.在“文稿”中点开需要操作的文件, 2. 点击左上角的缩略图icon(四个小方块) 3.此时你可以看到所有页,每页下面有个倒三角的小箭头 4. 点击小箭头,有删除选项.

  4. Android模拟器Genymotion使用

    介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的特点,是Android开发.测试等相关人员的必备工具. 官网地址:https://www.genym ...

  5. 八大排序算法——归并排序(动图演示 思路分析 实例代码java 复杂度分析)

    一.动图演示 二.思路分析 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序 1.  向上归并排序的时候,需要一个暂存数组用来排序, 2.  将 ...

  6. 转载:Keytool 工具介绍

    1.产生一个keystore: keytool -genkey -alias myssl -keyalg RSA -keystore myssl.jks 运行这个命令,系统提示: Enter keys ...

  7. 【Monkey】Monkey获取包名的方式

    获取包名的方式: 1.有源码:查看AndroidManifest.xml 2.只有apk: 2.1 aapt dump xmltree ColaBox.apk AndroidManifest.xml ...

  8. js定义函数方式有。。。

    1,常见方式 function  fun(data,...){ console.log(data); } 注:随处可调用 2. 函数直接定义函数 var fun = function (data,.. ...

  9. Tensorflow搭建卷积神经网络识别手写英语字母

    更新记录: 2018年2月5日 初始文章版本 近几天需要进行英语手写体识别,查阅了很多资料,但是大多数资料都是针对MNIST数据集的,并且主要识别手写数字.为了满足实际的英文手写识别需求,需要从训练集 ...

  10. 微信公众号手机无法直接下载APK文件是怎么回事

    现在微信分享的功能很多,从分享的链接下载apk安卓包是很正常的,但是微信不让下载apk包,只能通过浏览器来下载,但是这要给用户一个提示吧,不然用户不知道 下面我们来实现,引导用户通过浏览器来下载apk ...