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. 06-图2 Saving James Bond - Easy Version

    题目来源:http://pta.patest.cn/pta/test/18/exam/4/question/625 This time let us consider the situation in ...

  2. 不会UML的程序员不是好构架师?

    情况描述 我已经工作两年半, 参加过一个网页游戏项目和一个IOS应用项目, 自以为参与度非常高, 也经常涉及到底层引擎和主逻辑业务. 目前想更快的向构架师方向发展. 最近在看\<Learning ...

  3. 数字对 (长乐一中模拟赛day2T2)

    2.数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R < ...

  4. Unity 2D Touch Movement

    Demo试玩(Kongregate既然也有广告时间了 --!)http://www.kongregate.com/games/zhaoqingqing/2d-touch-movement 操作步骤 1 ...

  5. 每日一语:What is he getting at?

    What is he getting at? 他讲这话是什么意思? 2015-1-12

  6. Android 手势识别类 ( 三 ) GestureDetector 源码浅析

    前言:上 篇介绍了提供手势绘制的视图平台GestureOverlayView,但是在视图平台上绘制出的手势,是需要存储以及在必要的利用时加载取出手势.所 以,用户绘制出的一个完整的手势是需要一定的代码 ...

  7. smarty中foreach的用法举例

  8. 一道看似简单的sql需求却难倒各路高手 - 你也来挑战下吗?

    转自:http://www.cnblogs.com/keguangqiang/p/4535046.html 听说这题难住大批高手,你也来试下吧.ps:博问里的博友提出的. 原始数据 select *  ...

  9. .net 4.0 自定义本地缓存策略的不同实现

    在分布式系统的开发中,为了提高系统运行性能,我们从服务器中获取的数据需要缓存在本地,以便下次使用,而不用从服务器中重复获取,有同学可能要问,为什么不使用 分布式缓存等,注意,服务器端肯定是考虑到扩展, ...

  10. sqlalchemy 的 raw sql 方式使用示例

    #获取数据库 from sqlalchemy import create_engine db = create_engine("sqlite:///:memory:", echo= ...