Kruskal重构树的模板题。

给你N个点的无向图 (1 <= N <= 15,000),记为:1…N。
图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000).

现在有 K个询问 (1 < = K < = 20,000)。
每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+10,INF=1e9,B=19;
4 inline int read(){
5 char c=getchar();int x=0,f=1;
6 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
7 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
8 return x*f;
9 }
10 int fa[N],f[N][21],ch[N][21],cnt,val[N],dep[N];
11 int n,M,K;
12
13 struct Edge{
14 int u,v,w;
15 bool operator< (const Edge &rhs) const {
16 return w<rhs.w;
17 }
18 }E[N];
19 int num=0;
20
21 inline void add(int x,int y,int z){
22 E[++num]=(Edge){x,y,z};
23 }
24
25 int find(int x){
26 if(fa[x]==x) return fa[x];
27 else return fa[x]=find(fa[x]);
28 }
29
30 void Kruskal(){
31 sort(E+1,E+num+1);//按边的权值排序
32 int tot=0;
33 for(int i=1;i<=M;i++){
34 int x=E[i].u,y=E[i].v;
35 int fx=find(x),fy=find(y);
36 if(fx!=fy){//建树
37 ch[++cnt][0]=fx,ch[cnt][1]=fy;
38 fa[fa[x]]=fa[fa[y]]=f[fa[x]][0]=f[fa[y]][0]=cnt;
39 val[cnt]=E[i].w;//边权转化为点权
40 }
41 }
42 }
43
44 void dfs(int x){//求深度
45 if(!ch[x][0]&&!ch[x][1]) return ;//叶子节点
46 dep[ch[x][0]]=dep[ch[x][1]]=dep[x]+1;
47 dfs(ch[x][0]);dfs(ch[x][1]);
48 }
49
50 int LCA(int x,int y){//倍增求LCA
51 if(dep[x]<dep[y]) swap(x,y);
52 for(int i=B;i>=0;i--){
53 if(dep[f[x][i]]>=dep[y])
54 x=f[x][i];
55 }
56 if(x==y) return x;
57 for(int i=B;i>=0;i--){
58 if(f[x][i]!=f[y][i])
59 x=f[x][i],y=f[y][i];
60 }
61 return f[x][0];
62 }
63
64 main(){
65 cnt=n=read();M=read();K=read();
66 for(int i=1;i<=n<<1;i++) fa[i]=i;//初始化
67 for(int i=1;i<=M;i++){
68 int x=read(),y=read(),z=read();
69 add(x,y,z);
70 }
71 Kruskal();//重构树
72 dep[cnt]=1;dfs(cnt);//cnt重构完后所有的节点数,也是当前的根节点
73 for(int i=1;i<=B;i++){
74 for(int j=1;j<=2*N;j++)
75 f[j][i]=f[f[j][i-1]][i-1];//ST表
76 }
77 while(K--){
78 int x=read(),y=read();
79 cout<<val[LCA(x,y)]<<endl; //答案就是x,y最近公共祖先的点权
80 }
81 return 0;
82 }

BZOJ3732 Network(Kruskal重构树)的更多相关文章

  1. BZOJ3732: Network(Kruskal重构树)

    题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...

  2. [bzoj 3732] Network (Kruskal重构树)

    kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...

  3. 【BZOJ 3732】 Network Kruskal重构树+倍增LCA

    Kruskal重构树裸题, Sunshine互测的A题就是Kruskal重构树,我通过互测了解到了这个神奇的东西... 理解起来应该没什么难度吧,但是我的Peaks连WA,,, 省选估计要滚粗了TwT ...

  4. BZOJ3732 (Kruskal重构树)

    Kruskal重构树上\(x\)和\(v\)的\(lca\)的权值即为它们最长路最小值 #include <cstdio> #include <iostream> #inclu ...

  5. BZOJ 3732: Network Kruskal 重构树

    模板题,练练手~ Code: #include <cstdio> #include <algorithm> #define N 80000 #define setIO(s) f ...

  6. Kruskal重构树学习笔记+BZOJ3732 Network

    今天学了Kruskal重构树,似乎很有意思的样子~ 先看题面: BZOJ 题目大意:$n$ 个点 $m$ 条无向边的图,$k$ 个询问,每次询问从 $u$ 到 $v$ 的所有路径中,最长的边的最小值. ...

  7. 【BZOJ】3732: Network【Kruskal重构树】

    3732: Network Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2812  Solved: 1363[Submit][Status][Dis ...

  8. BZOJ 3732 Network 【模板】kruskal重构树

    [题解] 首先,我们可以发现,A到B的所有路径中,最长边的最小值一定在最小生成树上.我们用Kruskal最小生成树时,假设有两个点集U,V,若加入一条边w(u,v)使U,V联通,那么w就是U中每个点到 ...

  9. Kruskal重构树+LCA || BZOJ 3732: Network

    题面:https://www.lydsy.com/JudgeOnline/problem.php?id=3732 题解:Kruskal重构树板子 代码: #include<cstdio> ...

随机推荐

  1. 面试突击68:为什么 TCP 需要 3 次握手?

    TCP 三次握手是一道经典的面试题,它是指 TCP 在传递数据之前,需要进行 3 次交互才能正式建立起连接,并进行数据传递. TCP 之所以需要 3 次握手是因为 TCP 双方都是全双工的.所谓全双工 ...

  2. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  3. 上穷碧落下凡尘:Win10系统下基于Docker配置Elasticsearch7配合Python3进行全文检索交互

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_166 基于文档式的全文检索引擎大家都不陌生,之前一篇文章:使用Redisearch实现的全文检索功能服务,曾经使用Rediseac ...

  4. 使用fontforge修改字体,只保留数字

    设计图上的数字采用了Roboto字体,原字体文件200多k,而小程序主包最大2m,承受不起这么大的字体.因为只用到了数字,所以可以使用fontforge编辑字体,删除多余的部分. 一.下载并安装fon ...

  5. 用固态U盘让你的办公环境随身移动

    有些人因为家中的电脑设备没有办公环境,或者是软件太多装起来麻烦,以及环境不同步等原因上下班总是背着电脑,其实大可不必,只要将系统装进U盘,就可以让你的办公环境随身移动.在公司时启动U盘系统工作,下班后 ...

  6. LuoguP3128 [USACO15DEC]最大流Max Flow (树上差分)

    跟LOJ10131暗的连锁 相似,只是对于\(lca\)节点把它和父亲减一 #include <cstdio> #include <iostream> #include < ...

  7. DOM及DOM相关操作

    DOM 概述: DOM 全称(document object model)文档对象模型(文档指定为对应html文档),对应的DOM就是操作HTML文档的(增删改查) DOM结构 document 文档 ...

  8. 前端React项目遇到【Uncaught SyntaxError: Unexpected token '<'】错误的解决方式

    问题描述 前端部署好项目后,打开相应的页面显示一片空白,打开console显示 问题排查思路 理解问题的本质 出现这个错误的原因是浏览器期望得到js文件,但页面却返回了html文件,如图中的js文件点 ...

  9. 计算机的主存储器(RAM)

    主存储器是存放指令和数据的,并能由 CPU 直接随机存取的存储器.主要由存储体.控制线路.地址寄存器.数据寄存器和地址译码电路五部分组成.

  10. 详解GaussDB(DWS) 资源监控

    摘要:本文主要着重介绍资源池资源监控以及用户资源监控. 本文分享自华为云社区<GaussDB(DWS)资源监控之用户.队列资源监控>,作者: 一只菜菜鸟. GaussDB(DWS)资源监控 ...