WIKIOI 1519 过路费

1519 过路费

1519 过路费
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 大师 Master
题解
题目描述 Description
在某个遥远的国家里,有 n个城市。编号为 1,2,3,…,n。这个国家的政府修建了m 条双向道路,每条道路连接着两个城市。政府规定从城市 S 到城市T需要收取的过路费为所经过城市之间道路长度的最大值。如:A到B长度为 2,B到C 长度为3,那么开车从 A经过 B到C 需要上交的过路费为 3。
佳佳是个做生意的人,需要经常开车从任意一个城市到另外一个城市,因此他需要频繁地上交过路费,由于忙于做生意,所以他无时间来寻找交过路费最低的行驶路线。然而, 当他交的过路费越多他的心情就变得越糟糕。 作为秘书的你,需要每次根据老板的起止城市,提供给他从开始城市到达目的城市,最少需要上交多少过路费。

输入描述 Input Description
第一行是两个整数 n 和m,分别表示城市的个数以及道路的条数。
接下来 m 行,每行包含三个整数 a,b,w(1≤a,b≤n,0≤w≤10^9),表示a与b之间有一条长度为 w的道路。
接着有一行为一个整数 q,表示佳佳发出的询问个数。
再接下来 q行,每一行包含两个整数 S,T(1≤S,T≤n,S≠T), 表示开始城市S 和目的城市T。

输出描述 Output Description
输出共q行,每行一个整数,分别表示每个询问需要上交的最少过路费用。输入数据保证所有的城市都是连通的。

样例输入 Sample Input
4 5
1 2 10
1 3 20
1 4 100
2 4 30
3 4 10
2
1 4
4 1

样例输出 Sample Output
20
20

数据范围及提示 Data Size & Hint
对于 30%的数据,满足 1≤ n≤1000,1≤m≤10000,1≤q≤100;
对于 50%的数据,满足 1≤ n≤10000,1≤m≤10000,1≤q≤10000;
对于 100%的数据,满足 1≤ n≤10000,1≤m≤100000,1≤q≤10000;

program df;
type point=^node;
node=record
date,ends:longint;
next:point;
end;
var i,j,n,m,x,y,z,k,t,sum:longint;
path:array[0..100000] of point;
a,b,c,d,e,f:array[0..100000] of longint;
dp,ff:array[0..100000,0..35] of longint;
f2:array[0..100000] of boolean;
procedure com(x,y,z:longint);
var i:point;
begin
i:=path[x];
new(path[x]);
path[x]^.ends:=y;
path[x]^.date:=z;
path[x]^.next:=i;
end;
function max(x,y:longint):longint;
begin
if x>y then exit(x)
else exit(y);
end;
function find(x:longint):longint;
begin
if f[x]=x then exit(x)
else f[x]:=find(f[x]);
exit(f[x]);
end;
procedure union(x,y:longint);
begin
x:=find(x);
y:=find(y);
f[x]:=y;
end;

procedure sq(l,r:longint);
var i,j,m,gg:longint;
begin
i:=l; j:=r;
m:=c[(l+r) div 2];
repeat
while c[i]小于m do inc(i);
while c[j]>m do dec(j);
if i<=j then
begin
gg:=c[i]; c[i]:=c[j]; c[j]:=gg;
gg:=b[i]; b[i]:=b[j]; b[j]:=gg;
gg:=a[i]; a[i]:=a[j]; a[j]:=gg;
inc(i); dec(j);
end;
until i>j;
if l小于j then sq(l,j);
if i小于r then sq(i,r);
end;
procedure dfs(x:longint);
var i:point;
y:longint;
begin
f2[x]:=true;
i:=path[x];
while i<>nil do
begin
y:=i^.ends;
if not f2[y] then
begin
d[y]:=d[x]+1;
f[y]:=x;
ff[y,0]:=i^.date;
dp[y,0]:=x;
dfs(y);
end;
i:=i^.next;
end;
f2[x]:=false;
end;
procedure lca(u,v:longint);
var ii:longint;
begin
if d[u]小于d[v] then
begin
ii:=u; u:=v; v:=ii;
end;
ii:=30;
while d[u]>d[v] do
begin
while d[dp[u,ii]]小于d[v] do dec(ii);
sum:=max(sum,ff[u,ii]);
u:=dp[u,ii];
end;
if u=v then exit;
ii:=30;
while ii>=0 do
begin
while (ii>=0) and (dp[u,ii]=dp[v,ii]) do dec(ii);
if ii>=0 then
begin
sum:=max(sum,ff[u,ii]);
sum:=max(sum,ff[v,ii]);
u:=dp[u,ii];
v:=dp[v,ii];
end;
end;
sum:=max(sum,ff[u,0]);
sum:=max(sum,ff[v,0]);
exit;
end;
begin
readln(n,m);
for i:=1 to m do
readln(a[i],b[i],c[i]);
sq(1,m); //将路径按照过路费价格从小到大排序
for i:=1 to n do
f[i]:=i;
k:=0;
for i:=1 to m do
begin
if find(a[i])<>find(b[i]) then
begin
inc(k);
union(a[i],b[i]);
com(a[i],b[i],c[i]);
com(b[i],a[i],c[i]); //建立最小生成树
end;
if k=n-1 then break;
end;
d[1]:=1;
dfs(1);
for j:=1 to 30 do
for i:=1 to n do
begin
dp[i,j]:=dp[dp[i,j-1],j-1];
ff[i,j]:=max(ff[i,j-1],ff[dp[i,j-1],j-1]); //i的第2^j-1个祖先的值
end;
readln(m);
for i:=1 to m do
begin
readln(x,y);
sum:=0;
lca(x,y);
writeln(sum); //求极小值中的最大值
end;
end.

转载于:https://www.cnblogs.com/Gxyhqzt/p/7784300.html

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

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

相关文章

code point,code unit

2019独角兽企业重金招聘Python工程师标准>>> 从一段API描述谈起&#xff1a; 在String的length的API中描述是这样的&#xff01; lengthpublic int length() Returns the length of this string. The length is equal to the number of 16-bit Unicode characters i…

Android之解决JsonObject里面的JsonArray数据会有斜杠问题

1、问题 本地保存了多个json格式的字符串 {"event":"sdk_ad_request_status","timestamp":1640180549231,"ad_app_id":"10104","pool_test":0,"ad_type":0,"ad_request_time":0,"requ…

【土地评价与土地管理】案例:兰州市榆中县农用地分等

文章目录 一、资料收集二、确定标准耕作制度、基准作物、指定作物、光温(气候生产潜力)三、划分指标区,确定分等因素及权重四、编制“指定作物-分等因素-自然质量分”记分规则表五、绘制分等因素分值图,划分分等单元六、计算农用地自然质量分七、计算自然质量等指数八、计算…

.NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(下)

Preview5对策略验证的方式没有改变&#xff0c;只不过内置了Token的生成&#xff0c;和《.NET6之MiniAPI(十)&#xff1a;基于策略的身份验证和授权》的验证方式基本相同&#xff0c;都是生成和验证使用的验证参数要一致&#xff0c;用继承AuthorizationHandler的子类来作每次请…

业务多变的公司上云后蒸蒸日上

一、云服务器与传统服务器的对比 1&#xff09;、传统服务器 传统服务器是一个独立的硬件设备,可以理解成是一台放在机房的高配置电脑,可根据需求安装各种操作系统以及配置各种环境,性能也比较强大。 2&#xff09;、云服务器 云服务器是构建在硬件服务器集群之上&#xff0c;…

2016福州大学软件工程第四次团队作业-系统设计成绩汇总

第四次团队作业——系统设计打分统计结果如下&#xff1a; 学号组别团队分数贡献比例个人分数031401433606notconnected141613.83031402606606notconnected141413.33031402618606notconnected141814.34031402629606notconnected141413.33031402631606notconnected141914.590314…

[转]在C#中像Python一样编写TensorFlow机器学习代码

机器学习是一个令人激动人心的领域&#xff0c;一直有新的技术突破。研究人员不断推动机器智能的提升&#xff0c;教机器如何听说读写——这些曾经是我们人类专属的技能。机器学习的首选语言是Python&#xff0c;最受欢迎的库是Google的TensorFlow。几乎所有的代码示例都是用Py…

【土地评价与土地管理】教案 第一章:土地评价要素的选择

文章目录 1.1 土地构成要素与其农业利用1、光能条件2、热量条件3、降水条件1.1 土地构成要素与其农业利用 1、光能条件  光能是绿色植物进行光合作用和生物运动发展的主要能源  太阳辐射、日照时数  太阳辐射量随地域和季节变化较大,导致了土地利用的多样性和土地资源…

Blazor University (33)表单 —— EditContext、FieldIdentifiers

原文链接&#xff1a;https://blazor-university.com/forms/editcontext-fieldidentifiers-and-fieldstate/EditContext、FieldIdentifiers 和 FieldState请注意&#xff0c;对于那些希望了解 Blazor 如何“在后台”工作的人来说&#xff0c;这是一个高级主题。无需了解此信息即…

Flutter之Container的宽度如何设置为手机屏幕宽度

1、问题 Container的宽度如何设置为手机屏幕宽度 2、解决办法 width: MediaQuery.of(context).size.width,Row(children: [Container(height: 40,width: MediaQuery.of(context).size.width,// width: double.infinity,color: Colors.red,child: Row(children: [Containe…

团队项目开发篇章8

例会时间&#xff1a;2016.11.3 整理&#xff1a;姬索肇 例会照片 每个人的工作 任务分配 我们今天与王鹿鸣学长和李云涛学长针对团队开发过程中遇到的问题进行了讨论&#xff0c;非常感谢学长们的热心帮助&#xff0c;同时我们也被他们强大的编程能力所折服~ 在这里为学长们点…

MongoDB常用命令

启动MongoDB$mongod --fork --logpath/data/log/r3.log--fork 允许mongod后台运行&#xff0c;但是必须指定日志记录文件路径&#xff08;Enables a daemon mode that runs the mongos process in the background.&#xff09;--logpath 指定日志记录文件路径 导出Collections$…

【地理信息系统GIS】教案(七章全)第一章:地理信息系统概述

文章目录 第一节 GIS基本概念第二节 GIS的组成第三节 GIS的功能第四节 GIS的发展第一节 GIS基本概念 1.1 GIS基本概念 1、信息 是用文字、数字、符号、语言、图象、图形等介质来表达事件、事物或现象等的内容、数量和特征,从而向人们(或系统)提供关于现实世界新的事实和知…

C# 读写ini文件 保存信息

/// <summary> /// 获取本地信息 /// </summary> /// <returns></returns> private List<MHistoryKewWord> GetLocalHistoryKeyWords(){List<MHistoryKewWord> list new List<MHistoryKewWord>();var fs new FileStream("dat…

表达式的动态解析和计算,Flee用起来真香

前言在很多项目中经常会出现需要动态解析表达式和计算的场景&#xff0c;比如一些自动审核规则&#xff0c;或者是一些变量的值通过维护的公式在运行过程中动态算出&#xff1b;由于场景需求&#xff0c;都需要比较灵活的配置对应的表达式&#xff0c;然后希望在需要的时候能根…

C语言九十五之实现经典的反转数组(通过指针或数组下标操作)

✅作者简介&#xff1a;大家好我是码玛莎拉蒂&#xff0c;CSDN博客专家&#x1f947;&#x1f947;&#x1f947; &#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;C语言试题200例 &#x1f4ac;推荐一款模拟面试、刷题神器&#x1f449; 点击跳转…

Linux下使用shell实现上传linux下某个目录下所有文件到ftp

首先我们需要搞清楚单个文件怎么上传&#xff0c;把这个单文件上传到ftp上的实现命名为一个:upload_to_ftp_command.sh 之后&#xff0c;需要弄清楚怎么实现遍历一个目录下的所有文件的&#xff0c;把这个遍历某个目录下的文件实现命名为&#xff1a;foeach_directory_and_uplo…

【地理信息系统GIS】教案(七章全)第二章:地理信息系统数据结构及数据获取

文章目录 第一节 地理空间及其表达第二节 空间数据采集第三节 属性数据采集第四节 空间数据格式转换第五节 空间数据质量第一节 地理空间及其表达 1.1 地理空间 地理空间上至大气电离层,下至地幔莫霍面,是生命过程活跃的场所,也是宇宙过程对地球影响最大的区域。 地理信息…

[转]Mysql数据库开发的36条原则

前言 这些原则都是经历过实战总结而成 每一条原则背后都是血淋淋的教训 这些原则主要是针对数据库开发人员&#xff0c;在开发过程中务必注意 总是在灾难发生后&#xff0c;才想起容灾的重要性&#xff1b; 总是在吃过亏以后&#xff0c;才记得曾有人提醒过。 一、核心原则…

Kamp;R练习题6-1统计关键词出现的次数

这道练习题训练了&#xff1a; 1.结构体数组 2.二分查找 3.指针操作 ---- 都不难。但非常基础&#xff0c;我认为非常好&#xff0c;做完了记到博客上来&#xff0c;题目见k&R&#xff0c;实现例如以下&#xff1a; /** Practice of struct array. K&R 6-1* author : w…