链接

https://www.lydsy.com/JudgeOnline/problem.php?id=3545

离线询问,按照权值排个序

就是在克鲁斯卡尔时候维护个treap,到时候挨个查询一下就好了

nb的gzy说要要在线才是呢,nb

代码

/**************************************************************
Problem: 3545
User: gryz2016
Language: C++
Result: Accepted
Time:8708 ms
Memory:69660 kb
****************************************************************/ #include <iostream>
#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
const int N=1e5+7;
const int inf=0x3f3f3f3f;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int ch[N*40][2],siz[N*40],cnt;
void build(int l,int r,int L,int &now) {
if(!now) now=++cnt;
siz[now]++;
if(l==r) return;
int mid=(l+r)>>1;
if(L<=mid) build(l,mid,L,ch[now][0]);
else build(mid+1,r,L,ch[now][1]);
}
int merge(int x,int y) {
if(!x||!y) return x+y;
siz[x]+=siz[y];
ch[x][0]=merge(ch[x][0],ch[y][0]);
ch[x][1]=merge(ch[x][1],ch[y][1]);
return x;
}
int query(int l,int r,int k,int rt) {
if(l==r) return l;
int mid=(l+r)>>1;
if(siz[ch[rt][0]]>=k) return query(l,mid,k,ch[rt][0]);
else return query(mid+1,r,k-siz[ch[rt][0]],ch[rt][1]);
}
struct node {int u,v,q;}e[N*5];
bool cmp1(node a,node b) {return a.q<b.q;}
struct QQQ {int v,x,k,id;}Q[N*5];
bool cmp2(QQQ a,QQQ b) {return a.x<b.x;}
int n,m,q,a[N*5],f[N*5],ans[N*5],rt[N*5];
int find(int x) {return f[x]==x ? x : f[x]=find(f[x]);}
void uu(int x,int y) {
if(x==y) return;
rt[y]=merge(rt[x],rt[y]);
f[y]=x;
}
int main() {
// freopen("1.in","r",stdin);
// freopen("a.out","w",stdout);
n=read(),m=read(),q=read();
for(int i=1;i<=n;++i) a[i]=read();
for(int i=1;i<=m;++i) e[i].u=read(),e[i].v=read(),e[i].q=read();
for(int i=1;i<=q;++i) Q[i].v=read(),Q[i].x=read(),Q[i].k=read(),Q[i].id=i;
sort(e+1,e+1+m,cmp1);
sort(Q+1,Q+1+q,cmp2);
for(int i=1;i<=n;++i) f[i]=i,build(1,1e9,a[i],rt[i]);
int js=1;
memset(ans,-1,sizeof(ans));
for(int i=1;i<=m;++i) {
int fx=find(e[i].u),fy=find(e[i].v);
if(fx==fy) continue;
while(Q[js].x<e[i].q&&js<=q) {
int fa=find(Q[js].v);
if(siz[rt[fa]]>=Q[js].k)
ans[Q[js].id]=query(1,1e9,siz[rt[fa]]-Q[js].k+1,rt[fa]);
js++;
}
uu(fx,fy);
}
while(Q[js].k<=e[n].q&&js<=q) {
int fa=find(Q[js].v);
if(siz[rt[fa]]>=Q[js].k)
ans[Q[js].id]=query(1,1e9,siz[rt[fa]]-Q[js].k+1,rt[fa]);
js++;
}
for(int i=1;i<=q;++i) printf("%d\n", ans[i]);
return 0;
}

3545: [ONTAK2010]Peaks 平衡树,最小生成树的更多相关文章

  1. BZOJ 3545: [ONTAK2010]Peaks( BST + 启发式合并 + 并查集 )

    这道题很好想, 离线, 按询问的x排序从小到大, 然后用并查集维护连通性, 用平衡树维护连通块的山的权值, 合并就用启发式合并.时间复杂度的话, 排序是O(mlogm + qlogq), 启发式合并是 ...

  2. BZOJ 3545: [ONTAK2010]Peaks [Splay启发式合并]

    3545: [ONTAK2010]Peaks 题意:带权图,多组询问与一个点通过边权\(\le x\)的边连通的点中点权k大值 又读错题了,输出点一直WA,问的是点权啊 本题加强版强制在线了,那这道题 ...

  3. 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树

    [BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...

  4. ●BZOJ 3545 [ONTAK2010]Peaks(离线)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3545 http://www.lydsy.com/JudgeOnline/problem.ph ...

  5. BZOJ.3545.[ONTAK2010]Peaks(线段树合并)

    题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...

  6. bzoj 3545: [ONTAK2010]Peaks

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1124  Solved: 304[Submit][Status][Discuss] Descripti ...

  7. bzoj 3545: [ONTAK2010]Peaks Kruskal重构树

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

  8. BZOJ 3551/3545: [ONTAK2010]Peaks加强版 (Kruskal树+dfs序上的主席树+倍增)

    Orz PoPoQQQ 学到了维护子树信息的时候用dfsdfsdfs序套主席树节省线段树空间. 学到了怎么用指针写可持久化线段树-emmm- CODE 只贴上3551加强版带强制在线的代码 #incl ...

  9. BZOJ 3545: [ONTAK2010]Peaks 启发式合并 + 离线 + Splay

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

随机推荐

  1. python中impyla包报'TSocket' object has no attribute 'isOpen'错误

    经搜索得知,是thrift-sasl的版本太高了(0.3.0),故将thrift-sasl的版本降级到0.2.1 pip install thrift-sasl==0.2.1 经测试impyla 可以 ...

  2. sqlserver恢复数据库被挂起

    已测试过,直接执行此句后,数据库恢复原状态.数据不会丢失.具体是什么意思,暂时没来得及搞明白 RESTORE database dbname with norecovery

  3. Vue系列之 => 模拟购物车添加小球动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. JavaScript三种判断语句和三元运算符

    三种判断语句 1.if结构 语法:if(条件){条件满足时执行的代码块} 2.if else结构 语法:if(条件){条件满足时执行的代码块}   else{条件不满足时执行的代码块} 3.if el ...

  5. 准备mybatis-spring

    spring-mybatis下载:https://mvnrepository.com/artifact/org.mybatis/mybatis-spring 导入mybatis-spring-2.0. ...

  6. Jmeter下进行ip伪造

    转至https://blog.csdn.net/xingchao416/article/details/53506051 1.首先获取一些闲置的ip地址,且必须为固定地址,不能是自动获取的地址,方法: ...

  7. mac电脑设置USB键盘按键方法,设置多显示屏镜像显示器的方法

    mac电脑设置USB键盘按键方法,设置多显示屏镜像显示器的方法 设置多显示屏镜像显示器的方法 ==================== mac电脑复制粘贴使用command+c command+v - ...

  8. PHP 取302跳转后真实 URL 的两种方法

    1 . 第一种,CURL形式[感觉处理略慢,代码偏多] $url = '将跳转的URL'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url) ...

  9. JustOj 2043: N!

    题目描述 输出N的阶乘.(注意时间限制150ms&&注意不能打表后输出,赛后我们会检查代码,如有发现,该位同学总分记0分处理) 打表的定义:在本地主机预先计算出了每个值对应的答案,并把 ...

  10. bzoj4444 国旗计划

    题目链接 倍增,预处理出每个点往后$2^i$个应该选哪个人 我用的treap就是快 #include<algorithm> #include<iostream> #includ ...