[JOI 2024 Final] 建设工程 2 / Construction Project 2]

news/2025/3/1 12:25:00/文章来源:https://www.cnblogs.com/phuzzz/p/18744706

P10206 [JOI 2024 Final] 建设工程 2 / Construction Project 2

题目描述

JOI 国有 \(N\) 个火车站,编号从 \(1\)\(N\)。另外,JOI 国有 \(M\) 条双向铁路线,编号从 \(1\)\(M\)。铁路线 \(i\ (1 \leq i \leq M)\) 连接了火车站 \(A_{i}\) 和火车站 \(B_{i}\),从一个站到另一个站需要花费 \(C_i\) 分钟。

你是 JOI 国的部长,决定按照以下方式新建一条铁路线:

选择两个整数 \(u, v\ (1 \leq u<v \leq N)\),在火车站 \(u\) 和火车站 \(v\) 之间建设一条双向铁路线,从一个站到另一个站需要花费 \(L\) 分钟。注意,即使已经有一条连接火车站 \(u\) 和火车站 \(v\) 的铁路线也可以建设。

如果你建设这条铁路线后,可以花费不超过 \(K\) 分钟从火车站 \(S\) 到火车站 \(T\),国王就会高兴。我们不考虑换乘时间和等待时间。

你有 \(\frac{N(N-1)}{2}\) 种选择两个整数 \(u, v\) 的方法,你想知道其中有多少种方法会让国王高兴。

给定火车站和铁路线以及国王的要求的信息,编写一个程序,求出其中有多少种选择整数的方法会让国王高兴。

输入格式

第一行包含两个整数 \(N,M\)

第一行包含两个整数 \(S,T,L,K\)

接下来 \(M\) 行,每行包含三个整数 \(A_i, B_i, C_i\),表示第 \(i\) 条双向铁路线。

输出格式

输出一行一个整数,表示让国王高兴的两个整数的选择方法有多少种。

输入输出样例 #1

输入 #1

7 8
6 7 1 2
1 2 1
1 6 1
2 3 1
2 4 1
3 5 1
3 7 1
4 5 1
5 6 1

输出 #1

4

输入输出样例 #2

输入 #2

3 2
1 3 1 2
1 2 1
2 3 1

输出 #2

3

输入输出样例 #3

输入 #3

6 4
2 5 1000000000 1
1 2 1000000000
2 3 1000000000
2 4 1000000000
5 6 1000000000

输出 #3

0

输入输出样例 #4

输入 #4

18 21
4 8 678730772 3000000062
5 13 805281073
8 17 80983648
3 8 996533440
10 16 514277428
2 5 57914340
6 11 966149890
8 12 532734310
2 9 188599710
2 3 966306014
12 16 656457780
16 18 662633078
1 15 698078877
2 8 665665772
2 6 652261981
14 15 712798281
7 13 571169114
13 14 860543313
6 7 454251187
9 14 293590683
6 14 959532841
3 11 591245645

输出 #4

16

说明/提示

对于所有输入数据,满足:

  • \(2 \leq N \leq 2\times 10^5\)
  • \(1 \leq M \leq 2\times 10^5\)
  • \(1 \leq S<T \leq N\)
  • \(1 \leq L \leq 10^{9}\)
  • \(1 \leq K \leq 10^{15}\)
  • \(1 \leq A_{i}<B_{i} \leq N\ (1 \leq i \leq M) (A_{i}, B_{i}) \neq (A_{j}, B_{j})\ (1 \leq i<j \leq M)\)
  • \(1 \leq C_{i} \leq 10^{9}\ (1 \leq i \leq M)\)

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
1 \(L=1, K=2, C_{i}=1\ (1 \leq i \leq M)\) 8
2 \(N \leq 50, M \leq 50\) 16
3 \(N \leq 3000, M \leq 3000\) 29
4 无附加限制 47

题解

新建线路后,我们有两种策略考虑从火车站 \(S\) 到火车站 \(T\) 用时

  • 不使用新线路:
    如果新建线路前已存在 从火车站 \(S\) 到火车站 \(T\) 最短用时 小于 \(K\) ,则在任意两个火车站间建设线路均符合题意。方案数为 \(\frac{N(N-1)}{2}\)

  • 使用新线路:

    ​ 记 \(S\)\(T\)\(X\) 的用时为 \(diss(X)\)\(dist(X)\) 连接火车站U、V

    新的用时为 \(diss(U) + L + dist(V)\)
    暴力跑到的时间复杂度为 \(O(n^2)\) 显然超时,考虑对 \(dist\) 排序二分优化\(O((m + n) log n)\)

代码

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;ll n, m, s, t, l;
ll k;
vector<vector<pii>> g;
vector<ll> diss, dist;void init();
void dijkstra(int s, vector<ll>& dis);
int main() {init();// 计算s t到其他点的用时dijkstra(s, diss);dijkstra(t, dist);// 考虑不使用if (diss[t] <= k) {cout << n * (n - 1) / 2 << endl;return 0;}// 考虑使用sort(dist.begin() + 1, dist.end());ll ans = 0;for (auto x : diss) ans += upper_bound(dist.begin() + 1, dist.end(), k - l - x) - dist.begin() - 1;cout << ans << endl;return 0;
}void dijkstra(int s, vector<ll>& dis) {priority_queue<pii, vector<pii>, greater<pii>> pq;dis[s] = 0;pq.push({ 0, s });while (!pq.empty()) {auto [d, u] = pq.top();pq.pop();if (d > dis[u]) continue;for (auto [v, w] : g[u]) {if (dis[u] + w >= dis[v])continue;dis[v] = dis[u] + w;pq.push({ dis[v], v });}}
}void init() {cin >> n >> m >> s >> t >> l >> k;g.resize(n + 1);diss.resize(n + 1, 0x3f3f3f3f3f3f3f3f);dist.resize(n + 1, 0x3f3f3f3f3f3f3f3f);for (int i = 1; i <= m; i++) {ll u, v, w;cin >> u >> v >> w;g[u].push_back({ v, w });g[v].push_back({ u, w });}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891514.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Minitab 21软件下载与安装教程

【Minitab 21软件下载与安装教程】 1-安装包 扫描下方二维码关注「软知社」,后台回复【036】三位数字即可免费获取分享链接,无广告拒绝套路; 2-安装教程解压下载安装包,双击Setup.exe安装,弹窗安装对话框语言默认中文,点击下一步点击下一步勾选我接受 ,点击下一步选择开…

LaTex 2024软件下载与安装教程

1-安装包 扫描下方二维码关注「软知社」,后台回复【037】三位数字即可免费获取分享链接,无广告拒绝套路; 2-安装教程双击压缩包内intall-tl-windows.bat安装,弹窗安装对话框自动弹出安装窗口,如果弹出以下窗口说明文件夹目录太长或者有中文,建议放磁盘根目录;如果没有弹…

Stata 18软件下载与安装教程

【Stata 18软件下载与安装教程】 1-安装包 扫描下方二维码关注「软知社」,后台回复【035】三位数字即可免费获取分享链接,无广告拒绝套路; 2-安装教程双击解压包内Setup.exe安装,弹窗安装对话框点击下一步选择I accept ,点击下一步输入用户名,任意输入,点击Next选择Sta…

AutoCAD 2024软件下载与安装教程

【AutoCAD 2024软件下载与安装教程】 1-安装包 扫描下方二维码关注「软知社」,后台回复【034】三位数字即可免费获取分享链接,无广告拒绝套路; 安装教程双击Setup.exe安装,弹窗安装对话框安装准备选择我同意,点击下一步选择安装目录,点击下一步默认不勾选,点击安装等待…

Alpine和CSP,最速败北传说

描述 alpine是一个轻量级的响应式框架,但是当我将其写到用户脚本中后,我发现了一些问题。试作解决 下面这个文档中有提到为什么会出现问题。 https://alpinejs.dev/advanced/csp https://github.com/alpinejs/alpine/discussions/1944 https://github.com/alpinejs/alpine/di…

三思万能拉力试验机——驱动高分子材料创新研发的新引擎

一、引言 在当今工业升级与绿色制造的大背景下,高分子材料凭借其轻质、高强、耐腐蚀和环保等优势正被广泛应用于航空航天、汽车、电子、医疗等各个领域。与此同时,高分子材料产品在研发过程中对力学性能、耐久性和环境适应性等方面提出了更高要求。作为研发和质量控制的核心装…

【蓝队】access日志分析

一、access日志常见的目录 IIS 通常情况下,IIS日志文件存储在以下位置:C:\inetpub\logs\LogFiles。在这个目录下,您将看到以日期命名的子文件夹,每个子文件夹对应一个日期。在每个日期的文件夹中,您将找到具体的日志文件,通常以W3SVC开头,后面跟着一个唯一的标识符。Apa…

【蓝队】关于安全告警的正报样本

样本一:命令执行 常见的命令攻击语句 GET /simple/tests/tmssql.php?do=phpinfo GET /detail.php?id=/winnt/system32/cmd.exe?/c+dir+c:%5c GET /cgi/maker/ptcmd.cgi?cmd=;cat+/tmp/config/usr.ini GET /cgi/maker/ptcmd.cgi?cmd=;cat+/etc/passwd攻击语句出现在Get 、…

使用idea的restClient功能

模拟http请求的restClient工具 post请求 get请求:

【蓝队】关于安全告警的误报样本

背景: 一些网站实现存在安全隐患,用户的一些正常流量,也可以被攻击者篡改,直接发起攻击。常见问题:url参数实现时直接传递sql语句 url参数实现时可以传递js脚本 url参数实现时用../进行目录穿越访问文件 url参数实现时直接调用一些系统函数 url参数可以进行域名重定向 系统…

RStudio 2024 软件下载与安装教程

【RStudio 2024 软件下载与安装教程】 1-安装包 扫描下方二维码关注「软知社」,后台回复【033】三位数字即可免费获取分享链接,无广告拒绝套路; 2-安装教程双击R-4.4.2-win.exe安装,弹窗安装对话框选择语言,点击确定点击下一步选择安装目录,选择C盘以外,点击下一步点击…

H3C路由器与Centos8对接L2TP

linux做为LNS 1.安装xl2tpd yum install -y xl2tpd 2.配置文件 vim /etc/xl2tpd/xl2tpd.confvim /etc/ppp/options.xl2tpdvim /etc/ppp/chap-secrets3.启动 systemctl restart xl2tpd.service systemctl enable xl2tpd.service4.添加路由 ip link add name veth1 type veth ip …