NOIP 2013 提高组 洛谷P1967 货车运输 (Kruskal重构树)
题目:
A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路。每一条道路对车辆都有重量限制,简称限重。
现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
对于每一组询问,相当于求点x到点y中所有路径中最小边权的最大值,这样就是货车的最大载重。
那么这显然可以用Kruskal重构树来解决,将重构树建成大根堆,就可以求最大边权的最小值;同理,小根堆就是最小边权的最大值。
那么做这道题就是重构树的模板题了。复杂度O(q logn)。
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=2e5+10;
4 struct edge{
5 int u,v,w;
6 bool operator < (const edge &x){
7 return w>x.w; //小根堆
8 }
9 }e[N];
10 vector<int> g[N];
11 int n,m,q,cnt,fa[N],vis[N],val[N],d[N],f[N][30];
12 int find(int x){
13 return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
14 }
15
16 void kruskal(){
17 sort(e+1,e+m+1);
18 for(int i=1;i<=n;i++) fa[i]=i;
19 for(int i=1;i<=m;i++){
20 int fu=find(e[i].u),fv=find(e[i].v);
21 if(fu!=fv){
22 val[++cnt]=e[i].w;
23 fa[cnt]=fa[fu]=fa[fv]=cnt;
24 g[cnt].push_back(fu);
25 g[cnt].push_back(fv);
26 g[fu].push_back(cnt);
27 g[fv].push_back(cnt);
28 }
29 }
30 }
31
32 void dfs(int u,int fa){
33 d[u]=d[fa]+1,f[u][0]=fa,vis[u]=1;
34 for(int i=1;(1<<i)<=d[u];i++)
35 f[u][i]=f[f[u][i-1]][i-1];
36 for(int i=0;i<g[u].size();i++){
37 int v=g[u][i];
38 if(v!=fa) dfs(v,u);
39 }
40 }
41
42 int lca(int x,int y){
43 if(d[x]<d[y]) swap(x,y);
44 for(int i=25;i>=0;i--)
45 if(d[f[x][i]]>=d[y]) x=f[x][i];
46 if(x==y) return x;
47 for(int i=25;i>=0;i--)
48 if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
49 return f[x][0];
50 }
51
52 int main(){
53 scanf("%d%d",&n,&m);
54 cnt=n;
55 for(int i=1;i<=m;i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
56 kruskal();
57 for(int i=1;i<=cnt;i++){//注意图可能是个森林,不要漏掉
58 if(!vis[i]){
59 int f=find(i);
60 dfs(f,0);
61 }
62 }
63 scanf("%d",&q);
64 while(q--){
65 int u,v;
66 scanf("%d%d",&u,&v);
67 if(find(u)!=find(v)) cout<<-1<<endl;
68 else cout<<val[lca(u,v)]<<endl;
69 }
70 return 0;
71 }
NOIP 2013 提高组 洛谷P1967 货车运输 (Kruskal重构树)的更多相关文章
- [NOIP2013] 提高组 洛谷P1967 货车运输
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- Luogu P1967 货车运输(Kruskal重构树)
P1967 货车运输 题面 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \ ...
- 洛谷 P1967 货车运输
洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...
- 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增
倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...
- [洛谷P4768] [NOI2018]归程 (kruskal重构树模板讲解)
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并 ...
- 洛谷 P1967 货车运输(克鲁斯卡尔重构树)
题目描述 AAA国有nn n座城市,编号从 11 1到n nn,城市之间有 mmm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qqq 辆货车在运输货物, 司机们想知道每辆车在不超过车 ...
- 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 洛谷P1967 货车运输
题目描述 \(A\)国有\(n\)座城市,编号从\(1\)到\(n\),城市之间有\(m\)条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有\(q\)辆货车在运输货物, 司机们想知道每辆车在 ...
随机推荐
- 4G巴歇尔槽流量采集网关
首先向大家展示下拓扑图: 金鸽科技R10物联网网关,带有一个RS485口可以采集巴歇尔槽的液位状态,还提供一个网口用于给摄像头和现场其他的网络设备提供网络传输通道!R10A内置了巴歇尔槽液位换算成流量 ...
- 用js获取当前页面的url
1.获取当前或者指定页面的文件名或路径 window.location.pathname 2.设置或获取整个URl字符串 window.location.href 3.设置或获取URL相关的端口号 w ...
- 趣味问题《寻人启事》的Python程序解决
偷懒了很久,今天我终于又来更新博客了~ 最近,我看到了一个趣味问题,或者说是数学游戏:<寻人启事>. 在表述这个问题前,我们需要了解一下"冰雹猜想": 对于任意一个正整 ...
- Java面试题(四)--RabbitMQ
1.MQ有哪些使用场景?(高频) 异步处理:用户注册后,发送注册邮件和注册短信.用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务. 系统解耦:比如用注册完成,再加一个发送微信通知.只 ...
- 万答#5,binlog解析出来的日志为何无法恢复
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题描述 问题来自一位群友,简单说就是用 mysqlbinlog 工具读取 bi ...
- 技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍 1.1 需求背景 混沌测试是检测分布式系统不确定性.建 ...
- banner.txt的图案
根据网上的图片的url生成图片: url的后缀是图片后缀(GIF, JPG, or PNG)才能转换,而像我图片下面的一般不能用(要靠运气,我就成功了) https://www.degraeve.co ...
- CF906C Party (状压DP)(未完成//鬼知道啥情况)
CF上下了数据,本地能过,一交就错 这状压不用解释,看代码就懂. #include <iostream> #include <cstdio> #include <cstr ...
- Mybatis 懒加载使用及源码分析
Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...
- 46th ECfinal 游记
Day0 坐高铁坐了七小时从北戴河到西安,但第一次线下赛,来的路上还是很激动的 路上看到华山,下次来西安一定去爬 刚下高铁站遇到了一个不知道干啥的xjj xjj:可以占用您一点时间吗?谢谢了. 我:不 ...