題目鏈結
有三種操作,
1.把點 x
xx 到根節點的路徑上所有的點染上一種沒有用過的新顏色。
2.求 x
xx 到 y
yy 的路徑的上的不同顏色數。
3.在以x
xx為根的子樹中選擇乙個點,使得這個點到根節點的路徑的不同顏色數最大,求最大權值。
可以發現修改操作的乙個性質:每種顏色的節點一定會形成一條鏈。
利用lct的性質,考慮一次access實際是將某個點與根的路徑打通,對應操作1,而乙個點到根路徑上虛邊的數量+1對應它到根的顏色數,這個顏色數在splay的時候維護一下就行了。
用d ep
[x
]dep[x]
dep[x]
表示x
xx到根的顏色數,可以發現操作2的答案是dep
[x]+
dep[
y]−2
∗dep
[lca
dep[x]+dep[y]-2*dep[lca
dep[x]
+dep
[y]−
2∗de
p[lc
ax,y]+1
]+1]+
1。考慮操作3,其實就是子樹求dep
depde
p最大值,套乙個樹剖就好了。
由於lct只是用於提取路徑,所以沒有make_root操作,不用打翻轉標記。
#include
#include
#include
#define n 100010
using
namespace std;
int nxt[n<<1]
,to[n<<1]
,head[n]
,cnt;
void
add(
int u,
int v)
int siz[n]
,dep[n]
,id[n]
,nid[n]
,n,tot;
struct seg_tree
void
change
(int u,
int l,
int r,
int l,
int r,
int v)
int mid=
(l+r)
>>1;
push_down
(u);
if(l<=mid)
change
(u<<
1,l,mid,l,r,v);if
(r>mid)
change
(u<<1|
1,mid+
1,r,l,r,v)
; val[u]
=max
(val[u<<1]
,val[u<<1|
1]);
}void
build
(int u,
int l,
int r)
int mid=
(l+r)
>>1;
build
(u<<
1,l,mid)
;build
(u<<1|
1,mid+
1,r)
; val[u]
=max
(val[u<<1]
,val[u<<1|
1]);
}int
answer
(int u,
int l,
int r,
int l,
int r)
}tr;
struct lct
// void set_tag(int u)
// void push_down(int u)
// void
rotate
(int u)
// int ton[n];
// void push_all(int u)
// void
splay
(int u)
}int
find_root
(int u)
void
access
(int u)
ch[u][1
]=x;
if(x)}}
}lct;
int son[n]
,fa[n]
,top[n]
;void
dfs1
(int u,
int f)
}void
dfs2
(int u,
int topp)
}int
lca(
int x,
int y)
if(dep[x]
>dep[y]
)swap
(x,y)
;return x;
}int
main()
dfs1(1
,0);
dfs2(1
,1);
tr.build(1
,1,n);
for(
int i=
1;i<=m;i++
)else
printf
("%d\n"
,tr.
answer(1
,1,n,id[x]
,id[x]
+siz[x]-1
));}
return0;
}
SDOI2017 樹點塗色
description bob有一棵n個點的有根樹,其中1號點是根節點。bob在每個點上塗了顏色,並且每個點上的顏色不同。定義一條路 徑的權值是 這條路徑上的點 包括起點和終點 共有多少種不同的顏色。bob可能會進行這幾種操作 1 x 把點x到根節點的路徑上所有的點染上一種沒有用過的新顏色。2 x ...
SDOI2017 樹點塗色
傳送門 塗色的操作和acc es saccess access 很像啊,如何用lct lctlc t維護這個東西呢。由於每次覆蓋的顏色都不同,且是從當前到結點覆蓋到根節點。那麼如果把顏色相同的一段維護在一條重鏈上,乙個點到根要經過多少虛邊也就包含多少顏色。所以用lct lctlc t模擬覆蓋的過程,...
SDOI2017 樹點塗色
bob有一棵nn個點的有根樹,其中1號點是根節點。bob在每個點上塗了顏色,並且每個點上的顏色不同。定義一條路徑的權值是 這條路徑上的點 包括起點和終點 共有多少種不同的顏色。bob可能會進行這幾種操作 把點xx到根節點的路徑上所有的點染上一種沒有用過的新顏色。求xx到yy的路徑的權值。在以x為根的...