[BZOJ3551]Peaks
[BZOJ3551]Peaks
BZOJ
luogu
建Kruskal重构树,点权为边权
按dfn序建出主席树
倍增找到能跳到的最浅的祖先
主席树查询一下
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=5e5+5;
int re(){
int x=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}
int n,m,q,cnt,S,tot,ts,len,ans;
int he[N],o[N],h[N<<1],val[N<<1],dfn[N<<1],sz[N<<1],dep[N<<1],fa[N<<1];
int f[20][N<<1],rt[N<<1],s[N<<5],ls[N<<5],rs[N<<5];
struct Edge{int u,v,w;}E[M];
struct edge{int to,next;}e[M<<2];
bool cmp(Edge a,Edge b){return a.w<b.w;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void link(int u,int v){
e[++cnt]=(edge){v,h[u]};h[u]=cnt;
e[++cnt]=(edge){u,h[v]};h[v]=cnt;
}
void add(int&x,int l,int r,int v){
s[++S]=s[x]+1;ls[S]=ls[x];rs[S]=rs[x];
x=S;if(l==r)return;int mid=(l+r)>>1;
if(v<=mid)add(ls[x],l,mid,v);
else add(rs[x],mid+1,r,v);
}
int qkth(int x,int y,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)>>1,Sz=s[rs[y]]-s[rs[x]];
if(k<=Sz)return qkth(rs[x],rs[y],mid+1,r,k);
return qkth(ls[x],ls[y],l,mid,k-Sz);
}
void dfs(int u){
dfn[u]=++ts;sz[u]=1;
if(f[0][u])rt[ts]=rt[ts-1];
if(u<=n)add(rt[ts],1,len,he[u]);
for(int i=h[u];i;i=e[i].next){
int v=e[i].to;
if(v==f[0][u])continue;
f[0][v]=u;dep[v]=dep[u]+1;
dfs(v);sz[u]+=sz[v];
}
}
int main(){
tot=n=re(),m=re(),q=re();
for(int i=1;i<=n;i++)o[i]=he[i]=re();
sort(o+1,o+n+1);
len=unique(o+1,o+n+1)-o-1;
for(int i=1;i<=n;i++)
he[i]=lower_bound(o+1,o+len+1,he[i])-o;
for(int i=1;i<=n<<1;i++)fa[i]=i;
for(int i=1;i<=m;i++)
E[i].u=re(),E[i].v=re(),E[i].w=re();
sort(E+1,E+m+1,cmp);
for(int i=1;i<=m;i++){
int x=find(E[i].u),y=find(E[i].v);
if(x==y)continue;val[++tot]=E[i].w;
link(tot,x);link(tot,y);fa[x]=fa[y]=tot;
}
for(int i=1;i<=tot;i++)
if(!dfn[i])dfs(find(i));
for(int i=1;i<=18;i++)
for(int j=1;j<=tot;j++)
f[i][j]=f[i-1][f[i-1][j]];
while(q--){
int u=re()^ans,x=re()^ans,k=re()^ans;
for(int i=18;i>=0;i--)
if(f[i][u]&&val[f[i][u]]<=x)u=f[i][u];
int A=rt[dfn[u]-1],B=rt[dfn[u]+sz[u]-1];
if(s[B]-s[A]<k)puts("-1"),ans=0;
else printf("%d\n",ans=o[qkth(A,B,1,len,k)]);
}
return 0;
}
[BZOJ3551]Peaks的更多相关文章
- bzoj3551 Peaks加强版
这个题--感觉离线和在线的代码难度差不多(pb_ds不要说话). 离线的话,就是把所有询问按照w排个序,然后一边Kruskal+平衡树启发式合并一边回答询问就好了. 在线也不难写.首先Kruskal重 ...
- 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)
传送门 一道考察比较全面的题. 这道题又用到了熟悉的kruskal+倍增来查找询问区间的方法. 查到询问的子树之后就可以用dfs序+主席树统计答案了. 代码: #include<bits/std ...
- BZOJ3551 Peaks加强版 [Kruskal重构树,主席树]
BZOJ 思路 我觉得这题可持久化线段树合并也可以做 我觉得这题建出最小生成树之后动态点分治+线段树也可以做 还是学习一下Kruskal重构树吧-- Kruskal重构树,就是在做最小生成树的时候,如 ...
- [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树
这次我们来搞一个很新奇的知识点:克鲁斯卡尔重构树.它也是一种图,是克鲁斯卡尔算法求最小生成树的升级版首先看下面一个问题:BZOJ3545 Peaks. 在Bytemountains有N座山峰,每座山峰 ...
- 【BZOJ3551】 [ONTAK2010]Peaks加强版
BZOJ3551 [ONTAK2010]Peaks加强版 Solution Kruscal重构树后发现可以对于小于的离散化然后倍增+主席树找到上一个的可行解. 然后就可以了. 如果数组开的不好,容易在 ...
- 【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
[BZOJ3551]Peaks加强版(Kruskal重构树,主席树) 题面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相 ...
- 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树
[BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...
- [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树)
3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2438 Solved: 763[Submit][ ...
- bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版
bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版 传送门:bzoj bzoj wdnmd为什么加强版不是权限题原题却是啊 3545: [ONTAK2010]Pe ...
随机推荐
- 将python对象序列化成php能读取的格式(即能反序列化到对象)
转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...
- ajax请求web容器控制超时
1.项目用到超时控制,针对ajax请求超时,可以参照如下解决方案 tomcat容器 web.xml 中配置 <session-config> <session-timeout> ...
- 原生js实现文字无缝向上滚动效果
在网上查找到了一个实现文字无缝向上滚动效果的源码,结果发现运行有问题,于是就稍加改动,实现了js无缝向上滚动的效果. <script> window.onload = roll(50); ...
- SpringCloud系列十:使用Feign实现声明式REST调用
1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User fin ...
- 复杂可编程逻辑器件CPLD的基本结构
复杂可编程逻辑器件CPLD的基本结构 文章出处:czhlcai 发布时间: 2008/12/08 | 6911 次阅读 专业薄膜开关打样工厂,12小时加急出货 1.基于乘积项的CPLD结构 CPL ...
- 关于angularjs在IE里的坑——F12工具打开,功能正常,关闭之后,angularjs not working
前端时间在做项目的时候,用到了angularjs,期间,发现了一个奇葩的问题,就是在IE11浏览器下,点击下方图1上箭头所示的位置,将此处的开关变为图2中箭头所示的样子,但是发觉没有反应,开关还是灰色 ...
- Jenkins安装与构建部署
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ...
- JS异步笔记
Promise 最早接触异步是在.net中,当时还是比较流行使用基于控件的BackgroundWorker,其自身通过子线程的方式来异步处理一些情况,并且封装了一些功能与主线程通信.后来,开始使用Th ...
- Cocoapod安装使用和常见问题
1.cocoapod的按照,cocoapod是运行在ruby环境下的,在ruby环境的 ,像cocoapod这样的开源项目时放在放在rubygems服务器上面的,但国内访问https://rubyge ...
- 转载:tar 解压缩命令~
转载自:http://blog.csdn.net/dunyanan1/article/details/38869059tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文 ...