题目名称 3470. [NOI 2020]翻修道路
输入输出 road.in/out
难度等级 ★★★★
时间限制 2000 ms (2 s)
内存限制 1024 MiB
测试数据 20
题目来源 Gravatarsyzhaoss 于2020-09-07加入
开放分组 全部用户
提交状态
分类标签
弦图 弦图和区间图
分享题解
通过:0, 提交:0, 通过率:0%
关于 翻修道路 的近10条评论(全部评论)

3470. [NOI 2020]翻修道路

★★★★   输入文件:road.in   输出文件:road.out   简单对比
时间限制:2 s   内存限制:1024 MiB

【题目描述】

C 国中包含 n 座城市,这些城市通过 m 条双向道路连接。城市从 1 到 n 编号,道路从 1 到 m 编号,i 号道路两端连接着城市 ui 与城市 vi,它的长度为 wi 米。经由这些道路,从 C 国中任意一个城市出发,均能到达其他所有城市。

C 国人民喜欢环路旅程,但又不喜欢经过太多条道路,为此 C 国的道路被建造得非常特殊。更具体地,对于一条经过 l 条道路的简单环路(即除起点城市外不经过重复城市的环路),它可以表示为 c1→c2→⋯→cl→c1(其中对于所有 1≤i<l,城市 ci 与城市 $c_{i+1}$ 有道路相连;城市 cl 与城市 c1 有道路相连;对于所有 1≤i<j≤l,有 ci≠cj),若 l>3,则 C 国的道路将满足下列条件:

存在两个在该环路上不相邻的城市 u, v,满足两个城市间有道路直接相连。即:存在 1≤u<v≤l,使得 v−u≥2,u 和 v 不同时为 1 和 l,并且城市 cu 与城市 cv 间有道路直接相连。

现在 C 国有了新的翻修计划,需要在城市 s 与城市 t 间寻找一条路径进行翻修。翻修时路径中包含的所有道路将无法通行,为了保障人民的日常生活,C 国希望在翻修这条路径时,经由剩余的道路(即没被包含在翻修路径内的道路)依然能满足:从 C 国中任意一个城市出发,均能到达其他所有城市

C 国找到了身为工程大师的你,请你帮助 C 国找出一条满足上述要求的翻修路径,并使得这条路径的总长尽量小

【输入格式】

第一行两个整数 n, m 分别表示城市个数与道路条数。

接下来 m 行每行三个整数 ui, vi, wi,依次表示每条道路的两个端点与它的长度。

数据保证每条道路都一定连接两个不同城市,即 ui≠vi。

最后一行两个整数 s, t,分别表示需要翻修的路径的两个端点。

【输出格式】

仅一行一个整数,表示满足题目要求的情况下,翻修路径的总长的最小值。

如果不存在满足题目要求的路径,输出一行一个整数 −1。

【样例输入1】

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

【样例输出1】

6

【样例1解释】

路径 (1,2,1),(2,3,1),(3,4,1) 是城市 1 和城市 4 间总长最小的路径,但不符合要求。

路径 (1,3,5),(3,4,1) 符合要求,长度为 6。

路径 (1,2,1),(2,4,6) 符合要求,长度为 7。

除上述两条路径外,没有其他满足要求的路径。

【样例输入2】

2 1
1 2 1
1 2。

【样例输出2】

-1

【数据范围】

对于所有测试点:2≤n≤5×10^5,2≤m≤10^6,s≠t。

1≤ui,vi≤n,ui≠vi,1≤wi≤10^9,保证任意两条道路它们的端点不全相同。

保证给出的道路满足题面描述第二段中的性质。

每个测试点的具体限制见下表:

特殊限制 A:所有道路的长度均相等。

特殊限制 B:所有 wi=1 的道路恰好构成 s 到 t 的一条路径,且其他 wi≠1 的道路的两条端点在这条路径上距离为 2。

【来源】

NOI2020 Day2 Task3