链接

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. 环形数组 最大子段和 dp

    题目链接:https://nanti.jisuanke.com/t/36118 环形数组的连续最大子段和,有两种情况. 1.最大和的这个子段没有包含头尾.所以直接dp[i] = max(dp[i-1] ...

  2. python多版本控制

    1安装git # yum install git -y 2.安装python依赖 # yum -y install gcc make patch gdbm-devel openssl-devel sq ...

  3. 10 enumerate()在字典,列表中的用法详解

    1.字典 li = {"alex"," aric","Alex","Tony","rain"}for ...

  4. Sitecore CMS中查看标准字段

    什么是标准字段? 标准字段是字段及其字段组的集合,用于包含有关Sitecore中项目的可配置元数据.Sitecore中继承自“标准模板”模板的任何项目都将包含这些字段. 可以在“标准模板”模板项找到/ ...

  5. 文件格式(图像 IO 14.3)

    文件格式 图片加载性能取决于加载大图的时间和解压小图时间的权衡.很多苹果的文档都说PNG是iOS所有图片加载的最好格式.但这是极度误导的过时信息了. PNG图片使用的无损压缩算法可以比使用JPEG的图 ...

  6. python pandas 基础理解

    其实每一篇博客我都要用很多琐碎的时间片段来学完写完,每次一点点,用到了就学一点,学一点就记录一点,要用上好几天甚至一两个礼拜才感觉某一小类的知识结构学的差不多了. Pandas 是基于 NumPy 的 ...

  7. Hive静态分区和动态分区

    一.静态分区 1.创建分区表 hive (default)> create table order_mulit_partition( > order_number string, > ...

  8. linux常用命令:cd 命令

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的.所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 1. 命 ...

  9. 转:C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解

    转载自:http://www.cnblogs.com/easyfrog/p/3141269.html using System; using System.Collections.Generic; u ...

  10. tomcat2章1

    package ex02.pyrmont; import java.io.File; public class Constants { public static final String WEB_R ...