题意:多次求从点x出发经过边权不超过k的边能走到的点中第k大的权值。

解:离线排序 + 并查集 + 线段树合并。

题面有锅...是第k大的权值不是第k大的山。

 #include <cstdio>
#include <algorithm> const int N = , M = , V = ; struct Edge {
int x, y, h;
inline bool operator <(const Edge &w) const {
return h < w.h;
}
}edge[M]; struct Ask {
int x, h, k, id;
inline bool operator <(const Ask &w) const {
return h < w.h;
}
}ask[M]; int fa[N], rt[N], ls[V], rs[V], sum[V], siz[N], tot, ans[M], X[N], val[N]; int find(int x) {
if(x == fa[x]) {
return x;
}
return fa[x] = find(fa[x]);
} int merge(int x, int y) {
if(!x || !y) {
return x | y;
}
int o = ++tot;
sum[o] = sum[x] + sum[y];
ls[o] = merge(ls[x], ls[y]);
rs[o] = merge(rs[x], rs[y]);
return o;
} int query(int k, int l, int r, int o) {
if(l == r) {
return r;
}
int mid = (l + r) >> ;
if(k > sum[rs[o]]) {
return query(k - sum[rs[o]], l, mid, ls[o]);
}
else {
return query(k, mid + , r, rs[o]);
}
} inline void Xmerge(int x, int y) {
x = find(x);
y = find(y);
if(x == y) {
return;
}
fa[y] = x;
siz[x] += siz[y];
// printf("siz %d += %d = %d \n", x, siz[y], siz[x]);
rt[x] = merge(rt[x], rt[y]);
return;
} void insert(int p, int l, int r, int &o) {
if(!o) {
o = ++tot;
}
sum[o] = ;
if(l == r) {
return;
}
int mid = (l + r) >> ;
if(p <= mid) {
insert(p, l, mid, ls[o]);
}
else {
insert(p, mid + , r, rs[o]);
}
return;
} int main() {
int n, m, q;
scanf("%d%d%d", &n, &m, &q);
for(int i = ; i <= n; i++) {
scanf("%d", &val[i]);
X[i] = val[i];
}
std::sort(X + , X + n + );
int xx = std::unique(X + , X + n + ) - X - ;
for(int i = ; i <= n; i++) {
val[i] = std::lower_bound(X + , X + xx + , val[i]) - X;
insert(val[i], , xx, rt[i]);
fa[i] = i; siz[i] = ;
}
for(int i = ; i <= m; i++) {
scanf("%d%d%d", &edge[i].x, &edge[i].y, &edge[i].h);
}
for(int i = ; i <= q; i++) {
scanf("%d%d%d", &ask[i].x, &ask[i].h, &ask[i].k);
ask[i].id = i;
}
std::sort(edge + , edge + m + );
std::sort(ask + , ask + q + ); int p = ;
for(int i = ; i <= q; i++) {
while(p <= m && edge[p].h <= ask[i].h) {
Xmerge(edge[p].x, edge[p].y);
p++;
// printf("Xmerge %d %d \n", edge[p].x, edge[p].y);
}
int x = find(ask[i].x);
// printf("x = %d \n", x);
// printf("%d < %d \n", siz[x], ask[i].k);
if(siz[x] < ask[i].k) ans[ask[i].id] = -;
else ans[ask[i].id] = X[query(ask[i].k, , xx, rt[x])];
}
for(int i = ; i <= q; i++) {
printf("%d\n", ans[i]);
}
return ;
}

AC代码

bzoj3545 Peaks的更多相关文章

  1. [bzoj2733]永无乡&&[bzoj3545]Peaks

    并不敢说完全会了线段树合并,只是至少知道原理写法了...还是太菜了,每天被大佬吊锤qwq 我看到的几道线段树合并都是权值线段树的合并.这个算法适用范围应该只是01线段树的. 这两道算入门题了吧... ...

  2. BZOJ3545 Peaks 离线处理+线段树合并

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

  3. bzoj3545 Peaks 线段树合并

    离线乱搞... 也就是一个线段树合并没什么 #include<algorithm> #include<iostream> #include<cstring> #in ...

  4. [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树

    这次我们来搞一个很新奇的知识点:克鲁斯卡尔重构树.它也是一种图,是克鲁斯卡尔算法求最小生成树的升级版首先看下面一个问题:BZOJ3545 Peaks. 在Bytemountains有N座山峰,每座山峰 ...

  5. [学习笔记]kruskal重构树 && 并查集重构树

    Kruskal 重构树 [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树 kruskal是一个性质优秀的算法 加入的边是越来越劣的 科学家们借这个特点尝试搞一点事 ...

  6. bzoj3545: [ONTAK2010]Peaks 重构树 主席树

    题目链接 bzoj3545: [ONTAK2010]Peaks 题解 套路重构树上主席树 代码 #include<cstdio> #include<algorithm> #de ...

  7. 【BZOJ3545】 [ONTAK2010]Peaks

    BZOJ3545 [ONTAK2010]Peaks Solution 既然会加强版,直接把强制在线的操作去掉就好了. 代码实现 #include<stdio.h> #include< ...

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

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

  9. 「BZOJ3545」「ONTAK2010」Peaks

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

随机推荐

  1. SpringBoot笔记--Jackson

    SpringUtil.getBean<GenericConversionService>().addConverter(Date2LocalDateTimeConverter()) var ...

  2. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)

    在linux系统下,如果下载并安装了应用程序,在启动时很有可能在键入它的名称时出现"command not found"的提示内容.如果每次都到安装目标文件夹内,找到可执行文件来进 ...

  3. Beta阶段敏捷冲刺四

    一.举行站立式会议 1.当天站立式会议照片一张 2.团队成员报告 林楚虹 (1) 昨天已完成的工作:导入到数据表 (2) 今天计划完成的工作:排行榜功能 (3) 工作中遇到的困难:转为csv文件时音标 ...

  4. Maven修改默认JDK

    Maven修改默认JDK 问题: 1.创建maven项目的时候,jdk版本是1.5版本,而自己安装的是1.7或者1.8版本. 2.每次右键项目名-maven->update project 时候 ...

  5. 在win10开启HyperV(Pro以上版本)安装的Docker,如何远程管理其他机器(Linux或者Win)的docker容器

    用k8s能直接管理吗? 不把那个容器加入集群,可以吗?

  6. jquery的extend方法(源码解析)

    1.前段时间一直忙于研究数据可视化(d3.js,three.js) 以及 php的 laravel框架,生活上也遇到很多事情,这大概就是人生中的迷茫期吧. 回想起,刚出来工作的时候,目标很明确,要学习 ...

  7. 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)

    Jeremy Howard 在业界可谓大名鼎鼎.他是大数据竞赛平台 Kaggle 的前主席和首席科学家.他本人还是 Kaggle 的冠军选手.他是美国奇点大学(Singularity Universi ...

  8. luogu1856

    P1856 [USACO5.5]矩形周长Picture 题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. ...

  9. Nginx FIND_CONFIG阶段

    Location 指令 syntax : location [=|~|~*|^~]  uri {...} @name {....} default: -- context: server,locati ...

  10. checkStyle 错误普及

    1Type is missing a javadoc commentClass  缺少类型说明 2“{” should be on the previous line“{” 应该位于前一行.解决方法: ...