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\)辆货车在运输货物, 司机们想知道每辆车在 ...
随机推荐
- 第六天python3 函数、参数及参数解构(一)
函数 作用:结构话编程对代码的最基本的封装,一般按照功能组织一段代码,封装的目的是为了复用,减少冗余代码,代码更加简洁.美观,可读易懂: 分类: 内建函数,如max() reversed()等 库函数 ...
- python 面向对象理解
简介 与java语言一样,python也属于面向对象编程,除此之外,还有面向过程编程.函数式编程. 面向过程编程:依据业务逻辑自上而下一步一步编写, 可能会存在冗余现象 函数式编程:需要编程语言可以将 ...
- Graph Theory の brief introduction
一. 图的概念 1.定义 某类具体事物(顶点)和这些事物之间的联系(边),由顶点(vertex)和边(edge)组成, 顶点的集合V,边的集合E,图记为G = (V,E) 2.分类 1 ...
- Java异步记录日志-2022新项目
一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...
- 11. MGR技术架构及数据同步、认证机制 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 目录 1. MGR架构 2. 事务数据同步.认证过程 ...
- STC8H开发(十五): GPIO驱动Ci24R1无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 查找默认安装的python路径,并输出到 FindPythonPathX_output.txt
在python程序设计教学中,在汉化IDEL时.为PyCharm项目设置解释器时,经常需要查找python安装路径.对老手来说很简单,但对很多刚开始学习编程的学生来说,则很困难.所以,编写了一个批处理 ...
- Javaweb06-JDBC
1.jdbc.properties配置文件 jdbc.properties driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localho ...
- Mybatis核心配置文件中的标签介绍
0. 标签顺序 Mybatis核心配置文件中有很多标签,它们谁谁写在前写在后其实是有顺序要求的: 从前到后: properties?,settings?,typeAliases?,typeHandle ...
- 痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我 ...