我直接来讲在线好了

这是一个很巧妙的方法,把边作为一个点

做一遍最小生成树,当加如一条边时,我们把这条边两点x,y的并查集的根i,j的父亲都设为这条边代表的点k,由k向i,j连边

这样我们就构建出一棵树,这棵树的叶子都是原来节点

且每棵子树都是在子树根所代表的边的限制下的最小连通块

这样我们就可以通过dfs序(只用对叶子标号)+主席树来维护k大了并通过倍增找到限制

这两题都是一副卡pascal过不了的样子……QAQ

另外网上的一些标称(bzoj3551)似乎没有考虑一个点没有边可走,但询问k=1的情况,可以加数据cha

 type node=record
po,next:longint;
end;
way=record
x,y,z:longint;
end;
point=record
l,r,s:longint;
end; var e:array[..] of node;
w:array[..] of way;
v:array[..] of boolean;
anc:array[..,..] of longint;
d,l,r,p,fa,c,a,b,h:array[..] of longint;
tree:array[..*] of point;
num,j,s,size,i,len,t,n,m,q,x,y,ans,k:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; function getf(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=getf(fa[x]);
exit(fa[x]);
end; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; procedure sort(l,r:longint);
var i,j,x:longint;
begin
i:=l;
j:=r;
x:=a[(l+r) shr ];
repeat
while a[i]<x do inc(i);
while x<a[j] do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; procedure qsort(l,r:longint);
var i,j,x:longint;
y:way;
begin
i:=l;
j:=r;
x:=w[(l+r) shr ].z;
repeat
while w[i].z<x do inc(i);
while x<w[j].z do dec(j);
if i<=j then
begin
y:=w[i]; w[i]:=w[j]; w[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; procedure dfs(x:longint);
var i,y:longint;
begin
v[x]:=true;
if x<=n then
begin
inc(num);
b[num]:=x;
l[x]:=num;
r[x]:=num;
exit;
end;
i:=p[x];
l[x]:=n;
r[x]:=;
while i<> do
begin
y:=e[i].po;
anc[y,]:=x;
dfs(y);
l[x]:=min(l[x],l[y]);
r[x]:=max(r[x],r[y]);
i:=e[i].next;
end;
end; function find(x,y:longint):longint;
var i:longint;
begin
for i:=size downto do
if a[anc[x,i]]<=y then x:=anc[x,i];
exit(x);
end; function build(l,r:longint):longint;
var m,q:longint;
begin
inc(t);
q:=t;
if l<>r then
begin
m:=(l+r) shr ;
tree[q].l:=build(l,m);
tree[q].r:=build(m+,r);
end;
exit(q);
end; function add(l,r,last,x:longint):longint;
var m,q:longint;
begin
inc(t);
q:=t;
if l=r then tree[q].s:=tree[last].s+
else begin
m:=(l+r) shr ;
if x<=m then
begin
tree[q].r:=tree[last].r;
tree[q].l:=add(l,m,tree[last].l,x);
end
else begin
tree[q].l:=tree[last].l;
tree[q].r:=add(m+,r,tree[last].r,x);
end;
tree[q].s:=tree[tree[q].l].s+tree[tree[q].r].s;
end;
exit(q);
end; function ask(l,r,x,y,k:longint):longint;
var m,s:longint;
begin
if l=r then exit(c[l])
else begin
m:=(l+r) shr ;
s:=tree[tree[y].r].s-tree[tree[x].r].s;
if s>=k then exit(ask(m+,r,tree[x].r,tree[y].r,k))
else exit(ask(l,m,tree[x].l,tree[y].l,k-s));
end;
end; procedure ins(x,y:longint);
begin
inc(len);
e[len].po:=y;
e[len].next:=p[x];
p[x]:=len;
end; begin
readln(n,m,q);
for i:= to n do
begin
read(d[i]);
a[i]:=d[i];
b[i]:=i;
end;
sort(,n);
s:=;
d[b[]]:=;
c[]:=a[];
for i:= to n do
begin
if a[i]<>a[i-] then
begin
inc(s);
c[s]:=a[i];
end;
d[b[i]]:=s;
end;
for i:= to *n do
fa[i]:=i;
for i:= to m do
readln(w[i].x,w[i].y,w[i].z); qsort(,m);
t:=n;
fillchar(a,sizeof(a),);
for i:= to m do
begin
x:=getf(w[i].x);
y:=getf(w[i].y);
if x<>y then
begin
inc(t);
fa[x]:=t;
fa[y]:=t;
a[t]:=w[i].z;
ins(t,x);
ins(t,y);
if t=*n- then break;
end;
end; a[]:=;
len:=t;
for i:= to len do
if not v[i] then dfs(getf(i));
size:=trunc(ln(len)/ln()+0.1);
for j:= to size do
for i:= to len do
begin
x:=anc[i,j-];
anc[i,j]:=anc[x,j-];
end;
t:=;
h[]:=build(,s);
for i:= to num do
h[i]:=add(,s,h[i-],d[b[i]]);
ans:=-;
for i:= to q do
begin
readln(x,y,k);
{ if ans<>-1 then
begin
x:=x xor ans;
y:=y xor ans;
k:=k xor ans;
end; }
x:=find(x,y);
if x<=n then
begin
if k= then ans:=c[d[x]]
else ans:=-;
end
else if tree[h[r[x]]].s-tree[h[l[x]-]].s<k then ans:=-
else ans:=ask(,s,h[l[x]-],h[r[x]],k);
writeln(ans);
end;
end.

bzoj3551 3545的更多相关文章

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

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

  2. [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树)

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2438  Solved: 763[Submit][ ...

  3. bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版

    bzoj3545/bzoj3551 [ONTAK2010]Peaks/Peaks加强版 传送门:bzoj  bzoj wdnmd为什么加强版不是权限题原题却是啊 3545: [ONTAK2010]Pe ...

  4. 【BZOJ 3545】【ONTAK 2010】Peaks & 【BZOJ 3551】【ONTAK 2010】Peaks加强版 Kruskal重构树

    sunshine的A题我竟然调了一周!!! 把循环dfs改成一个dfs就可以,,,我也不知道为什么这样就不会RE,但它却是A了,,, 这周我一直在调这个题,总结一下智障错误: 1.倍增的范围设成了n而 ...

  5. bzoj 3545&&3551: [ONTAK2010]Peaks &&加强版 平衡树&&并查集合并树&&主席树

    3545: [ONTAK2010]Peaks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 635  Solved: 177[Submit][Stat ...

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

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

  7. bzoj3551

    3551: [ONTAK2010]Peaks加强版 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 297[Submit][S ...

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

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

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

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

随机推荐

  1. JavaWeb常见错误总结

    错误1:(Ajax未加载问题) 今天我在学习AJAX的时候,想从一个JS文件中引入JQuery,然后在这个JS文件中使用AJAX的方法.结果V8引擎一直报错,错误类型是Uncaught Referen ...

  2. c++ uuid生成法则

    http://www.jb51.net/LINUXjishu/39614.html CentOS #include <uuid/uuid.h> 找不到文件解决方法: sudo yum in ...

  3. Java多线程——<一>概述、定义任务

    一.概述 为什么使用线程?从c开始,任何一门高级语言的默认执行顺序是“按照编写的代码的顺序执行”,日常开发过程中写的业务逻辑,但凡不涉及并发的,都是让一个任务顺序执行以确保得到想要的结果.但是,当你的 ...

  4. PAT-乙级-1051. 复数乘法 (15)

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  5. 浏览器后退按钮导致jquery动态添加的select option值丢失的解决方法

    监控浏览器返回功能 判断浏览器返回功能 禁用浏览器的后退按钮 JS禁止浏览器后退键 http://volunteer521.iteye.com/blog/830522/ 浏览器返回功能 判断上一页面来 ...

  6. 无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

    this.BeginInvoke(() => { this.btnQuery.Enabled = false; //禁用查询 }); 跨线程调用时,编译上面的代码将提示 对于Control.In ...

  7. Feature Flag

    know more from here: https://www.youtube.com/watch?v=WMRjj06R6jg&list=UUkQX1tChV7Z7l1LFF4L9j_g F ...

  8. NET 使用HtmlAgilityPack抓取网页数据

    刚刚学习了XPath路径表达式,主要是对XML文档中的节点进行搜索,通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问,html也是也是一种类似于xml的标记语言,但是语法没有那么严谨 ...

  9. 220 DIV2 B. Inna and Nine

    220 DIV2 B. Inna and Nine input 369727 output 2 input 123456789987654321 output 1 题意:比如例子1:369727--& ...

  10. 初识spring与quartz整合实现定时任务

    参考资料: http://kevin19900306.iteye.com/blog/1397744 引用自别人的博客: 特别注意一点,与Spring3.1以下版本整合必须使用Quartz1,最初我拿2 ...