Kruskal重构树裸题,

Sunshine互测的A题就是Kruskal重构树,我通过互测了解到了这个神奇的东西。。。

理解起来应该没什么难度吧,但是我的Peaks连WA,,,

省选估计要滚粗了TwT

#include<cstdio>
#include<cstring>
#include<algorithm>
#define for1(i,a,n) for(int i=(a);i<=(n);i++)
#define for2(i,a,n) for(int i=(a);i<(n);i++)
#define for3(i,a,n) for(int i=(a);i>=(n);i--)
#define for4(i,a,n) for(int i=(a);i>(n);i--)
#define read(x) x=getint()
#define CC(i,a) memset(i,a,sizeof(i))
using namespace std;
inline const int getint(){char c=getchar();int k=1,r=0;for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1;for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0';return k*r;}
inline const int max(const int &a,const int &b){return a>b?a:b;}
inline const int min(const int &a,const int &b){return a<b?a:b;}
inline void swapp(int &a,int &b){int c=a;a=b;b=c;}
const int N=15003;
const int M=30003;
struct node{int x,y,z;}E[M];
int n,m,lch[N<<1],rch[N<<1],num[N<<1],f[N<<1][16],fa[N<<1],deep[N<<1],cnt;
inline void init(){CC(lch,0);CC(rch,0);CC(num,0);CC(f,0);CC(fa,0);CC(deep,0);}
inline bool cmp(node X,node Y){return X.z<Y.z;}
inline int find(int X){
if (fa[X]==X) return X;
else {fa[X]=find(fa[X]); return fa[X];}
}
inline void LCA(){
for1(j,1,15)
for2(i,1,n<<1)
if (f[f[i][j-1]][j-1]!=0) f[i][j]=f[f[i][j-1]][j-1];
}
inline void dfs(int x){
if (lch[x]) {deep[lch[x]]=deep[x]+1; dfs(lch[x]);}
if (rch[x]) {deep[rch[x]]=deep[x]+1; dfs(rch[x]);}
}
inline int LCA_find(int u,int v){
if (deep[u]<deep[v]) swapp(u,v);
int dis=deep[u]-deep[v];
for1(i,0,15)
if ((1<<i)&dis) u=f[u][i];
if (u==v) return u;
for3(i,15,0) if (f[u][i]!=f[v][i]){u=f[u][i]; v=f[v][i];}
return f[u][0];
}
int main(){
init(); int K;
read(n); read(m); read(K);
for1(i,1,m) {read(E[i].x);read(E[i].y);read(E[i].z);}
sort(E+1,E+m+1,cmp);
cnt=n+1;
for2(i,1,n<<1) fa[i]=i;
for1(i,1,m){
int fx=find(E[i].x),fy=find(E[i].y);
if (fx==fy) continue;
fa[fx]=cnt; fa[fy]=cnt;
f[fx][0]=cnt; f[fy][0]=cnt;
lch[cnt]=fx; rch[cnt]=fy;
num[cnt]=E[i].z;
cnt++; if (cnt>(n<<1)-1) break;
}
LCA();
deep[(n<<1)-1]=1;
dfs((n<<1)-1);
int a,b,rt;
for1(i,1,K){
read(a); read(b);
rt=LCA_find(a,b);
printf("%d\n",num[rt]);
}return 0;
}

  然后就完了

【BZOJ 3732】 Network Kruskal重构树+倍增LCA的更多相关文章

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

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

  2. BZOJ 3732: Network Kruskal 重构树

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

  3. BZOJ3732Network——kruskal重构树+倍增+LCA/最小生成树+倍增

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

  4. BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra

    题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海 ...

  5. NOI2018Day1T1 归程 并查集 kruskal kruskal重构树 倍增表 Dijkstra

    原文链接https://www.cnblogs.com/zhouzhendong/p/NOI2018Day1T1.html 题目传送门 - 洛谷P4768 题意 给定一个无向连通图,有 $n$ 个点 ...

  6. LOJ #2718. 「NOI2018」归程(Dijkstra + Kruskal重构树 + 倍增)

    题意 给你一个无向图,其中每条边有两个值 \(l, a\) 代表一条边的长度和海拔. 其中有 \(q\) 次询问(强制在线),每次询问给你两个参数 \(v, p\) ,表示在 \(v\) 出发,能开车 ...

  7. Gym - 101173H Hangar Hurdles (kruskal重构树/最小生成树+LCA)

    题目大意:给出一个n*n的矩阵,有一些点是障碍,给出Q组询问,每组询问求两点间能通过的最大正方形宽度. 首先需要求出以每个点(i,j)为中心的最大正方形宽度mxl[i][j],可以用二维前缀和+二分或 ...

  8. LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)

    LOJ2718 BZOJ5415 洛谷P4768 Rank3+Rank1无压力 BZOJ最初还不是一道权限题... Update 2019.1.5 UOJ上被hack了....好像是纯一条链的数据过不 ...

  9. BZOJ3732: Network(Kruskal重构树)

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

随机推荐

  1. Web性能优化之图片延迟加载

    来源:微信公众号CodeL 对于一些图片多,页面长的网页来说,如果每次打开页面加载全部的网页内容,页面加载速度势必会受到影响,如果每次打开网页只将网页可视区域的内容加载给用户 ,将大大提高网页浏览速度 ...

  2. dipole antenna simulation by HFSS

    工作频点为1GHz,新建工程,添加新设计,编辑添加下面的变量 建立天线模型,即两个金属圆柱.编辑完一个振子后,另一半可以用镜像命令产生参数如下设置 ,材料为PEC 两个圆柱间建立一个矩形片,连接两个圆 ...

  3. 【NOIP合并果子】uva 10954 add all【贪心】——yhx

    Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvesconde ...

  4. codeforces 577E E. Points on Plane(构造+分块)

    题目链接: E. Points on Plane time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  5. HTML5本地存储localStorage与sessionStorage

    在最近的项目中用到了html5的本地存储,下面总结一下. 1.html5几种存储形式 本地存储(localStorage && sessionStorage) 离线缓存(applica ...

  6. 委托--delegate

    委托,跟类很相似,能够定义对象,但是区别是 1,委托必须有关键字delegate. 2,委托有类型修饰符,比如void,string,int.修饰符取决于他的方法返回类型. 3,委托没有方法实现. d ...

  7. emberjs重写补充类之reopen方法和reopenClass方法

    无需一次性将类定义完全,你可以使用reopen方法来重新打开(reopen)一个类并为其定义新的属性. Person.reopen({ isPerson: true }); Person.create ...

  8. ArcGis 统计方法

    from:http://blog.sina.com.cn/s/blog_4177d50b0100fjbg.html 概述 一般常用的统计功能例如:唯一字段统计.数据行数统计.数据值求和统计等. 1.基 ...

  9. 分享一个刷网页PV的python小脚本

    下面分享一个小脚本,用来刷网页PV. [root@huanqiu ~]# cat www.py #!/usr/bin/python# coding: UTF-8import webbrowser as ...

  10. Python-面向对像及其他

    其他相关 1.isinstance(obj,cls)       检查是否obj是类cls的对象   # 针对变量 n = 123 s = "123" print isinstan ...