博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ONTAK2010]Peaks
阅读量:5065 次
发布时间:2019-06-12

本文共 1652 字,大约阅读时间需要 5 分钟。

题意

有n个山峰,m条有困难度的双向路径,m个询问求从x出发经过路径困难度<=y所能到达的第k高的山峰的高度

N105,0M,Q5×105,hi,c,x109

题解

可以想到将路径和询问按困难度从低到高排序,每次对于当前询问将能加的边加进去,然后再查找第k大,这样就变成了

 

基本上一样。就输出高度坑了一点

#include
using namespace std;const int maxn=500005;int n,m,Q;int root[maxn],belong[maxn];int ans[maxn];struct Splay{ int fa,size,val,s[2];}tr[maxn];struct edge{ int x,y,dis;}e[maxn];struct question{ int start,dis,k,id;}q[maxn];template
inline void read(T &x){ x=0;char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}}bool cmp(edge a,edge b){ return a.dis
tr[now].val; if(!tr[now].s[o]){ tr[now].s[o]=x; tr[x]=(Splay){now,1,val,{
0,0}}; break; } now=tr[now].s[o]; } splay(x,root[id],id);}void dfs(int x,int y){ if(tr[y].s[0]) dfs(x,tr[y].s[0]); if(tr[y].s[1]) dfs(x,tr[y].s[1]); insert(x,tr[y].val,y);}void merge(int x,int y){ int dx=root[belong[x]],dy=root[belong[y]]; if(dx==dy) return ; if(tr[dx].size
=k) {now=tr[now].s[1];continue;} k-=tr[tr[now].s[1]].size; if(k==1) break; k--; now=tr[now].s[0]; } splay(now,root[belong[now]],belong[now]); return tr[now].val;}int main(){ read(n);read(m);read(Q); for(int i=1;i<=n;i++){ int x;read(x); insert(i,x,i); } for(int i=1;i<=m;i++) read(e[i].x),read(e[i].y),read(e[i].dis); sort(e+1,e+m+1,cmp); for(int i=1;i<=Q;i++) read(q[i].start),read(q[i].dis),read(q[i].k),q[i].id=i; sort(q+1,q+Q+1,cmp1); int j=0; for(int i=1;i<=Q;i++){ while(e[j+1].dis<=q[i].dis&&j
View Code

 

转载于:https://www.cnblogs.com/sto324/p/11303146.html

你可能感兴趣的文章
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
css3动画属性
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>