bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版
题目描述:
题解:
重构树+线段树合并。
可以算是板子了吧。
代码(非强制在线):
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
const int M = *N;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,m,q,to[N],h[N];
struct Pair
{
int x,y;
}p[N];
bool cmp(Pair a,Pair b){return a.x<b.x;}
struct Edge
{
int x,y,w;
void rd(){read(x),read(y),read(w);}
}d[M];
bool emp(Edge a,Edge b){return a.w<b.w;}
int ff[N<<],fa[N<<][],wg[N<<],ch[N<<][];
int findff(int u){return u==ff[u]?u:ff[u]=findff(ff[u]);}
void kru()
{
wg[] = 0x3f3f3f3f;
for(int i=;i<=(n<<);i++)ff[i] = i;
int tot = n,sum = ;
for(int i=;i<=m&&sum<n-;i++)
{
int x = findff(d[i].x),y = findff(d[i].y);
if(x!=y)
{
ff[x]=ff[y]=fa[x][]=fa[y][]=++tot;
wg[tot]=d[i].w;
sum++;
ch[tot][]=x,ch[tot][]=y;
}
}
}
void init()
{
for(int k=;(<<k)<=(n<<);k++)
for(int i=;i<(n<<);i++)
fa[i][k]=fa[fa[i][k-]][k-];
}
int rt[N<<];
struct segtree
{
int siz[*N],ls[*N],rs[*N],tot;
void insert(int l,int r,int&u,int qx)
{
if(!u)u=++tot;siz[u]++;
if(l==r)return ;
int mid = (l+r)>>;
if(qx<=mid)insert(l,mid,ls[u],qx);
else insert(mid+,r,rs[u],qx);
}
int merge(int x,int y)
{
if(!(x*y))return x+y;
int z = ++tot;
siz[z] = siz[x]+siz[y];
ls[z] = merge(ls[x],ls[y]);
rs[z] = merge(rs[x],rs[y]);
return z;
}
int query(int l,int r,int u,int qk)
{
if(l==r)return l;
int tmp = siz[rs[u]],mid = (l+r)>>;
if(qk<=tmp)return query(mid+,r,rs[u],qk);
else return query(l,mid,ls[u],qk-tmp);
}
}tr;
int main()
{
// freopen("tt.in","r",stdin);
read(n),read(m),read(q);
for(int i=;i<=n;i++)read(p[i].x),p[i].y=i;
sort(p+,p++n,cmp);
for(int las=0x3f3f3f3f,k=,i=;i<=n;i++)
{
if(las!=p[i].x)
{
las = p[i].x;
to[++k] = las;
}
h[p[i].y] = k;
}
for(int i=;i<=m;i++)d[i].rd();
sort(d+,d++m,emp);
kru();init();
for(int i=;i<=n;i++)tr.insert(,n,rt[i],h[i]);
for(int i=n+;i<(n<<);i++)rt[i]=tr.merge(rt[ch[i][]],rt[ch[i][]]);
for(int u,w,k,i=;i<=q;i++)
{
read(u),read(w),read(k);
for(int j=;j>=;j--)if(wg[fa[u][j]]<=w)u=fa[u][j];
if(tr.siz[rt[u]]<k)puts("-1");
else printf("%d\n",to[tr.query(,n,rt[u],k)]);
}
return ;
}
bzoj3545 [ONTAK2010]Peaks、bzoj3551 [ONTAK2010]Peaks加强版的更多相关文章
- bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版
bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版 传送门:bzoj bzoj wdnmd为什么加强版不是权限题原题却是啊 3545: [ONTAK2010]Pe ...
- 【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
[BZOJ3551]Peaks加强版(Kruskal重构树,主席树) 题面 BZOJ Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相 ...
- [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树)
3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2438 Solved: 763[Submit][ ...
- BZOJ3551 [ONTAK2010]Peaks加强版 kruskal 并查集 主席树 dfs序
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3551 题意概括 Description 在Bytemountains有N座山峰,每座山峰有他的高度 ...
- BZOJ3551: [ONTAK2010]Peaks加强版【Kruskal重构树】【主席树】
重要的事情说三遍 不保证图联通 不保证图联通 不保证图联通 那些和我一样认为重构树是点数的童鞋是要GG Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个 ...
- BZOJ3551 : [ONTAK2010]Peaks加强版
首先强制在线的话,肯定是不能再离线排序+平衡树启发式合并了. 这回要用的是线段树合并,每次把两棵线段树合并,总复杂度为$O(n\log n)$ 预处理: 把边按权值从小到大排序,依次加边, 对于边(x ...
- 【BZOJ3545&BZOJ3551】Peaks(kruskal重构树,主席树,dfs序)
题意:在Bytemountains有N座山峰,每座山峰有他的高度h_i. 有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走, 现在有Q组询问,每组询问询问从点v开始只 ...
- Peaks BZOJ 3545 / Peaks加强版 BZOJ 3551
Peaks [问题描述] 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问 ...
- 【BZOJ3551】 [ONTAK2010]Peaks加强版
BZOJ3551 [ONTAK2010]Peaks加强版 Solution Kruscal重构树后发现可以对于小于的离散化然后倍增+主席树找到上一个的可行解. 然后就可以了. 如果数组开的不好,容易在 ...
随机推荐
- java后台杂记
1.在@Select使用动态SQL有 "<=" 时要转义:<![CDATA[ <= ]]> 2.assert函数即断言,也即做出一些假设,程序运行时如果假设 ...
- st表求区间最大值
Input 第一行给出一个数字N,接下来N+1行,每行给出一个数字Ai,(0<=i<=N<=1E6)接来给出一个数字Q(Q<=7000),代表有Q个询问每组询问格式为a,b即询 ...
- [題解/狀壓dp]POJ_2411_Mondriaan's dream
关于“我读过很多书,到后来大部分都被我忘记了,那阅读的意义是什么?”的疑问,我看过最巧妙的一个回答:当我还是个孩子的时候,我吃过很多的食物,大部分已经一去不复返而且被我忘记了,但可以肯定的是,它们中的 ...
- Partition(线段树的离线处理)
有一点类似区间K值的求法. 这里有两颗树,一个是自己建的线段树,一个是题目中给定的树.以线段树和树进行区分. 首先离散化一下,以离散化后的结果建线段树,线段树的节点开了2维,一维保存当前以当前节点为权 ...
- nginx实现防盗链
有时候在浏览网页的时候,会遇到某些文件(图片等)无法访问的情况,这是因为图片的所有方做了防盗链机制 了解防盗链之前先了解下http referer这个属性,http referer是请求头中的一部分, ...
- uvm_sequence_item——sequence机制(一)
让子弹飞一会 UVM框架,将验证平台和激励分开,env以下属于平台部分,test和sequence属于激励,这样各司其职.我们可以将sequence_item 比喻成子弹,sequencer 类比成弹 ...
- 安装Pywin32后无法正常引用pyd文件
1. 首先在官方下载pywin32 2.下载完成后,无法正常引用pyd文件 3.解决方案: python安装目录\Lib\site-packages\pywin32_system32\* 至 C:\W ...
- explian使用介绍
1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有:A:simple:表示 ...
- ios UnitTest 学习笔记1
一.运行第一个单元测试: 1.在Xcode 5中新建一个工程默认自带一个单元测试的文件夹,IDE自动生成了一个实现XCTestCase的.m文件,里面有一个失败测试(早期版本中实现的是SenTestC ...
- JavaScript 跨域请求
1.最简单通用的做法就是 反向代理 通过nginx搭建一个反向代理服务器,通过将跨域的请求配置成转发:此方法适用于动静分离时,很多跨域请求的情况下: server { listen 8 ...