目录

  • 题目
  • 思路
  • 代码

题目

【题目背景】
由于小 X 是一位奆老, 奆老总是忙得一刻也停不下来。 他刚刚准备完食物, 小 X 童年的
挚友小 S 和小 Z 来找他帮忙了……
【题目描述】
小 S 和小 Z 十分喜欢看网络写手“252^525” 的小说, 但由于需要付费才能阅读, 而小 S 和小
Z 的零花钱有非常少, 他们只能找小 X 靠黑科技侵入给网站, 把小说给他们。
然而小 X 又非常的爱慕虚荣, 他要小 S 和小 Z 到自己家里来取小说。
小 S、 小 Z 和小 X 都居住在扬中市, 扬中市共有 nnn 个小区, mmm 条主干道(假设每条主干
道都是双行线) 。 小 S 家住在 111 号小区, 小 X 家住在 nnn 号小区。 小 S 每经过一条主干道需要
耗费 z 点体力, 但由于小 S 的人脉非常广, 每当他到达一个小区, 他都会和好友攀谈直到体
力回满。
由于小 Z 也希望能看到小说, 所以他答应帮助小 S kkk 次, 这 kkk 次小 S 经过主干道不需要
耗费体力。
由于小 S 生性懒惰, 他希望耗费最少的体力到达小 X 家, 请问他最少耗费多少体力?
注意: 如果小 S 到小 X 家可以一路上都由小 Z 背着, 那么体力上限为 000;
如果小 S 到不了小 X 家, 小 S 会很伤心, 体力上限为−1-1−1;

【输入格式】
第 1 行三个整数 n,m,kn,m,kn,m,k, 意思如题目描述。
第 2 到第 n+1 行是 x,y,zx,y,zx,y,z 指走连接 xxx 号小区和 yyy 号小区的主干道要耗费 zzz 点体力

【输出格式】
一行一个整数, 表示小 S 最少耗费的体力。

【输入样例】
5 7 1
1 2 5
3 1 4
2 4 8
3 2 3
5 2 9
3 4 7
4 5 6

【输出样例】
4

【样例解释】
小 S 的行走路线:1→3→2→51\rightarrow 3\rightarrow 2\rightarrow 51→3→2→5, 其中 2→52\rightarrow 52→5 这条主干道由小 Z 帮助小 S 通过。

【数据范围】
对于 30%的数据: n<=20;m<=100;n<=20;m<=100;n<=20;m<=100;
对于 60%的数据: n<=100;m<=1000;n<=100;m<=1000;n<=100;m<=1000;
对于 100%的数据: n<=1000;m<=10000;z<=1000000;n<=1000;m<=10000;z<=1000000;n<=1000;m<=10000;z<=1000000;

【后记】
附上两句 252^525 的语录:
1.扔掉一件东西的时候, 其实扔掉的不止是东西, 记下一件事情的时候, 其实记下的不止是
事情。
2.记在脑海里的东西或许会被忘却, 但记在心里的东西, 是不会消逝的。

思路

这一题我过了(Day 2终于拿了一次第一 )
答案显然具有单调性,所以可以进行二分答案。
于是,我们可以将问题转化为:有没有一种方法,使体力上限不超过mid。
check函数很好写,只需要把体力 > mid 的路径看做1,把 < mid 的路径看做0,dijkstra + 堆优化 即可(我也不知道要不要加优化,反正我加了)。

代码

#include <bits/stdc++.h>
using namespace std;
const int M = 4010, N = 40100, Z = 1000000;
int n, m, k, dis[M], vis[M], s[M], t[N], e[N], l[N];
struct node {int id, dis;friend bool operator < (node a, node b) {return a.dis > b.dis;}
}; priority_queue <node> q;int dijk(int x) {memset(vis, 0, sizeof(vis));memset(dis, 0x3f3f3f3f, sizeof(dis));node f = (node){1, 0};dis[1] = 0; q.push(f);while (!q.empty()) {f = q.top(); q.pop();vis[f.id] = 1;for (int i = s[f.id]; i != EOF; i = t[i]) {int e2 = e[i], k2 = dis[f.id];if (vis[e2]) continue;if (l[i] >= x) k2++;if (dis[e2] > k2) {dis[e2] = k2;node tmp = (node) {e2, dis[e2]};q.push(tmp);}}}return dis[n] >= k+1;
}int main() {cin >> n >> m >> k;memset(s, -1, sizeof(s));int tot = 1, u, v, w;for (int i = 1; i <= m; i++) {cin >> u >> v >> w;t[tot] = s[u], s[u] = tot, e[tot] = v, l[tot] = w, tot++;t[tot] = s[v], s[v] = tot, e[tot] = u, l[tot] = w, tot++;}int l = 0, r = Z+100, ans = -1;while (l <= r) {int m = (l+r) >> 1;if (dijk(m)) l = m+1, ans = m;else r = m-1;}if (ans > Z) cout << -1 << endl;else if (r < 0) cout << 0 << endl;else cout << ans << endl;return 0;
}

【2019 暑假JSOI Day 2 T2】小说(二分+最短路)相关推荐

  1. 2019暑假起集训实录

    欢迎 2019暑假集训实录 7.6 Codeforces #Round572补题,UVA820最大流,UVA12093树形dp,完成POJ1077优先队列bfs(A*),完成HDU1667-The R ...

  2. 2019暑假牛客多校赛第九场H.Cutting Bamboos (主席树+二分)

    题意: 有n条柱子,高度为aia_iai​ ,我们有qqq次操作.在l到r的范围内砍yyy次,将所有的树高都砍为0,但是保证每一刀砍出来的长度(砍除树高于该高度的和)都是相同的.问你第xxx次砍的时候 ...

  3. 2019暑假篇——巨树(二分答案)

    目录 一.题目 1.描述 2.输入 3.输出 4.样例输入 5.样例输出 二.题解 1.算法 2.细节 三.代码 谢谢! 一.题目 1.描述 给出一颗 N 个节点的树和 M 个关键节点以及无线数据传输 ...

  4. 【2019暑假集训】08.05比赛总结+HduACM

    传送门 这么多天一来第一次做省选组,居然登顶了 比赛思路 T1(有趣的数):直接数位DP似乎会T,逐渐丧失自信... T2(可见的点):找规律+莫比乌斯反演+整除分块,感jio还行. T3(精明的壕) ...

  5. 【2019暑假集训】07.10比赛总结

    终于上去啦( ̄▽ ̄)/ 比赛总结 今天的比赛比较简单. T1刚开始以为是一个无向图,觉得有点神仙.然后一看原来是个树,然后随便DP一下就好了. T2无数次提示转化成最短路图,然后又要求不连通,显然是最 ...

  6. 【2019暑假集训】08.07比赛总结

    省选组真的比A组简单...远古时期的集训队出题难度都不大 比赛思路 传送门 T1( 拯救Protoss的故乡):树形DP???暴力操作显然不可行.模型很像网络流,有的边费用为0,有的边费用为1,所以直 ...

  7. 【2019暑假集训】07.07比赛总结

    今天周末,没有比赛,随便做了一些题目 解题思路 2019.07.04[NOIP提高组]模拟 A 组 T1(非回文数字):数位DP T2(管道):环套树+解方程 T3(牛棚安排):网络流 T4([07. ...

  8. 【2019暑假集训】07.09比赛总结

    又是一天暴力赛 比赛思路 T1:看到B的子串就想打SAM,根本没有想什么其他的奇技淫巧,结果一群人水过了???其实正解很简单,暴力hash+二分就好了,还可以用SA或后缀树求LCP... T2:刚开始 ...

  9. 【2019暑假集训】08.04比赛总结

    比赛思路 2019.08.04[NOIP提高组]模拟 A 组 T1( 锻造 ):显然是DP,再根据期望的线性整理转移方程,但是我一开始并没有很好地划分状态,总是想到做的时候要考虑第一次做,以及从后面回 ...

最新文章

  1. php localcompare,GetDriveName 方法
  2. 关于网站域名的配置过程
  3. linux 分析 ptrace
  4. JavaEE之使用DOM4J和XPath对xml文档的添加,删除,查询操作
  5. sshd_config 中文手册
  6. java有效索引范围_java – 索引范围的上限始终假定为独占?
  7. 【HDU - 1867 】A + B for you again(KMP,next数组应用)
  8. Python开发环境Anaconda3使用指南(入门篇)
  9. 并行算法第四讲:比较器网络选择和排序
  10. Hessian Matrix
  11. C 语言实例 - 计算 int, float, double 和 char 字节大小
  12. 高级程序员不写代码?
  13. HFSS阵列天线设计与仿真1
  14. 关于胶质母细胞瘤的影像组学和影像基因组学
  15. 计算机组成原理MIPS
  16. 周星驰搞笑电影中的BT角色大全(100位)
  17. Placing Medals on a Binary Tree
  18. word排版技巧:论文图表目录制作步骤。
  19. 绘图与滤镜全面解析--Quartz 2D 、Core Image
  20. Journal of Electronic Imaging 投稿分享

热门文章

  1. R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
  2. ABAP 7.55更新概览
  3. fsl左右海马体分割+freesurfer合并
  4. Flutter事件分发流程简析
  5. 如何用人工智能预测股票(完整答案)
  6. 谷歌seo外链预算方案,影响谷歌反向链接成本的因素
  7. 潭州学院html学习(day09)
  8. 火猴之ppt动画效果实现(firemonkey)
  9. CNN剖析:如果你愿意一层一层剥开CNN的心
  10. 面向萌新的红帽杯2018线上赛wp