bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版

传送门:bzoj  bzoj

wdnmd为什么加强版不是权限题原题却是啊

3545: [ONTAK2010]Peaks

Time Limit: 10 Sec  Memory Limit: 128 MB
[Submit][Status][Discuss]

Description

在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1。

Input

第一行三个数N,M,Q。
第二行N个数,第i个数为h_i
接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径。
接下来Q行,每行三个数v x k,表示一组询问。

Output

对于每组询问,输出一个整数表示答案。

Sample Input

10 11 4

1 2 3 4 5 6 7 8 9 10

1 4 4

2 5 3

9 8 2

7 8 10

7 1 4

6 7 1

6 4 8

2 1 5

10 8 10

3 4 7

3 4 6

1 5 2

1 5 6

1 5 8

8 9 2

Sample Output

6

1

-1

8

HINT

【数据范围】

N<=10^5, M,Q<=5*10^5,h_i,c,x<=10^9。


果然还是太年轻了居然被这种水平的题吊打。。。

简短思路:

首先来一次kruskal

很明显不在树上的边都用不上

然后这时候就出现了kruskal重构树

随便挂个讲得好的博客

拼出来重构树之后用线段树合并或是主席树都行

以下通用代码(只差一排注释)

  1 #include<cstdio>
2 #include<algorithm>
3 #include<cstring>
4 using namespace std;
5 const int N=200011,inf=0x7f7f7f7f,M=500011;
6 template<typename TP>inline void read(TP &kk)
7 {
8 TP ret=0,f=1;char ch=getchar();
9 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10 while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
11 kk=ret*f;
12 }
13 int n,m,Q;
14 struct shino
15 {
16 int x,y,w;
17 bool operator < (const shino &a)const
18 {return w<a.w;}
19 }sl[M];
20 int snr;
21 #define lson(x) (son[x][0])
22 #define rson(x) (son[x][1])
23 struct sgt
24 {
25 int c[N*36],son[N*36][2],cnt;
26 void ins(const int x,int &px,int pl,int pr)
27 {
28 if(!px) px=++cnt;
29 c[px]++;
30 if(pl==pr) return;
31 int mi=pl+pr>>1;
32 if(x<=mi) ins(x,lson(px),pl,mi);
33 else ins(x,rson(px),mi+1,pr);
34 }
35 int merge(const int px,const int py)
36 {
37 if(!px||!py) return px+py;
38 int pz=++cnt;
39 c[pz]=c[px]+c[py];
40 lson(pz)=merge(lson(px),lson(py));
41 rson(pz)=merge(rson(px),rson(py));
42 return pz;
43 }
44 int query(int k,const int px,int pl,int pr)
45 {
46 if(pl==pr) return pl;
47 int mi=pl+pr>>1;
48 if(k<=c[lson(px)]) return query(k,lson(px),pl,mi);
49 else return query(k-c[lson(px)],rson(px),mi+1,pr);
50 }
51 }tr;
52 int rt[N];
53 int h[N];
54 int f[N],fa[N][20],val[N],son[N][2];
55 int find(int x)
56 {
57 if(f[x]!=f[f[x]]) return f[x]=find(f[x]);
58 return f[x];
59 }
60 void kksk()//k,k(ru)sk(al)... 无端玩梗的rkk是屑
61 {
62 snr=n,val[0]=inf;
63 for(int i=1;i<=m;i++)
64 {
65 int x=find(sl[i].x),y=find(sl[i].y);
66 if(x==y) continue;
67 f[x]=f[y]=fa[x][0]=fa[y][0]=++snr;
68 val[snr]=sl[i].w;
69 son[snr][0]=x,son[snr][1]=y;
70 }
71 }
72
73 int saki[N];
74 int main()
75 {
76 read(n),read(m),read(Q);
77 for(int i=1;i<=n;i++)
78 read(sl[i].w),sl[i].x=i;
79 sort(sl+1,sl+1+n);
80 for(int i=1;i<=n;i++)
81 {
82 if(sl[i].w!=sl[i-1].w) saki[++snr]=sl[i].w;
83 h[sl[i].x]=snr;
84 }
85 for(int i=1;i<=m;i++)
86 read(sl[i].x),read(sl[i].y),read(sl[i].w);
87 sort(sl+1,sl+1+m);
88 for(int i=1;i<=n*2;i++) f[i]=i;
89 kksk();
90 for(int i=1;i<=19;i++)
91 for(int x=1;x<=snr;x++)
92 fa[x][i]=fa[fa[x][i-1]][i-1];
93 for(int i=1;i<=n;i++) tr.ins(h[i],rt[i],1,n);
94 for(int i=n+1;i<=n*2;i++) rt[i]=tr.merge(rt[lson(i)],rt[rson(i)]);
95 int lans=0,xi,vi,ki;
96 while(Q--)
97 {
98 read(xi),read(vi),read(ki);
99 xi^=lans,vi^=lans,ki^=lans;//前后就差个这行
100 for(int i=19;i>=0;i--)
101 {
102 if(val[fa[xi][i]]<=vi) xi=fa[xi][i];
103 }
104 if(tr.c[rt[xi]]<ki){puts("-1");lans=0;}
105 else printf("%d\n",lans=saki[tr.query(tr.c[rt[xi]]-ki+1,rt[xi],1,n)]);
106 }
107 return 0;
108 }

bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版的更多相关文章

  1. 【bzoj3545】[ONTAK2010]Peaks 线段树合并

    [bzoj3545][ONTAK2010]Peaks 2014年8月26日3,1512 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路 ...

  2. 「BZOJ3545」「ONTAK2010」Peaks

    「BZOJ3545」「ONTAK2010」Peaks 题目传送门 题目大意: 给定一个 \(n\) 个点,\(m\) 条边的带点权边权无向图,有 \(q\) 次询问,每次询问从 \(v\) 点出发,经 ...

  3. 【bzoj3545/bzoj3551】[ONTAK2010]Peaks/加强版 Kruskal+树上倍增+Dfs序+主席树

    bzoj3545 题目描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询 ...

  4. bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版

    题目描述: bzoj3545,luogu bzoj3551 题解: 重构树+线段树合并. 可以算是板子了吧. 代码(非强制在线): #include<cstdio> #include< ...

  5. [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树)

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2438  Solved: 763[Submit][ ...

  6. 【BZOJ3551】【BZOJ3545】 【ONTAK2010】 Peaks (kruskal重构树+主席树)

    Description ​ 在\(Bytemountains\)有\(~n~\)座山峰,每座山峰有他的高度\(~h_i~\). 有些山峰之间有双向道路相连,共\(~m~\)条路径,每条路径有一个困难值 ...

  7. BZOJ3551 [ONTAK2010]Peaks加强版 kruskal 并查集 主席树 dfs序

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3551 题意概括 Description 在Bytemountains有N座山峰,每座山峰有他的高度 ...

  8. BZOJ3551: [ONTAK2010]Peaks加强版【Kruskal重构树】【主席树】

    重要的事情说三遍 不保证图联通 不保证图联通 不保证图联通 那些和我一样认为重构树是点数的童鞋是要GG Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个 ...

  9. BZOJ3551 : [ONTAK2010]Peaks加强版

    首先强制在线的话,肯定是不能再离线排序+平衡树启发式合并了. 这回要用的是线段树合并,每次把两棵线段树合并,总复杂度为$O(n\log n)$ 预处理: 把边按权值从小到大排序,依次加边, 对于边(x ...

随机推荐

  1. 理解Python装饰器(Decorator)

    date: 2017-04-14 00:06:46 Python的装饰器,顾名思义就是可以为已有的函数或对象起到装饰的作用,使得达到代码重用的目的. 从一个简单的例子出发 这个例子中我们已经拥有了若干 ...

  2. Note -「矩阵树定理」学习笔记

      大概--会很简洁吧 qwq. 矩阵树定理   对于无自环无向图 \(G=(V,E)\),令其度数矩阵 \(D\),邻接矩阵 \(A\),令该图的 \(\text{Kirchhoff}\) 矩阵 \ ...

  3. v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  4. 使用Jitpack发布开源Java库

    原文:使用Jitpack发布开源Java库 | Stars-One的杂货小窝 很久之前也写过一篇使用Jitpack发布Android开源库的文章,详见Android开发--发布第三方库到JitPack ...

  5. SpringBoot是如何做到自动装配的

    背景 众所周知,如下即可启动一个最简单的Spring应用.查看@SpringBootApplication注解的源码,发现这个注解上有一个重要的注解@EnableAutoConfiguration,而 ...

  6. NSSCTF-gift_pwn

    最近才开始接触"pwn"这个东西,这是近两天做的一个题目,然后就想着记一下. 好的,步入正题, 直接nc连接返回空白,然后直接退出,用kali的checksec工具或者是die检测 ...

  7. vue2项目,踩坑Jest单元测试

    目前的项目已经维护了挺久,由于客户要求,我们要为项目加上单元测试,挑选一番后选择了Jest(配置简便,开箱即用),下面记录了此次为项目添加Jest作为单元测试的经历. 安装Jest 1. 在项目目录下 ...

  8. 有了这个BI工具,财务分析再也不用愁

    财务软件的发展已基本上将财会工作者从登记凭证.记账.编制会计报表等繁重和重复性的工作中解放出来.但是,当前大多数管理软件或财务软件的财务分析功能还停留在会计信息或财务指标的数据处理.图表展现层面,支持 ...

  9. 大数据时代变局与机遇,BI数字化转型的实战攻略!

    党的十九大报告提出,要推动互联网.大数据.人工智能和实体经济深度融合.更加高效地获取.运用信息,成为企业具有强大竞争力的重要标志.我国企业应牢牢把握历史性机遇,以更加开放的姿态,积极拥抱新经济,积极参 ...

  10. 作为报表工具,Excel移动报表的优势和劣势

    Excel是应用最广泛的报表工具,它集数据存储.数据处理.数据分析于一身,广泛应用于各行各业的日常工作中(无论这个企业的信息化程度有多高.多低).而且随着Office365的普及,软件License的 ...