有一堆點,每個點都有其權值c
ic_i
ci。
每次插入邊(u,
v)
(u,v)
(u,v),u
uu和1
11連通,v
vv和1
11不連通。最後保證形成一棵樹。
每次插入的時候詢問1
11到u
uu的路徑上逆序對的個數。然後將1
11到u
uu的路徑上的所有節點的權值設為c
vc_v
cv.
一看就知道是什麼資料結構題了……
然而剛了很久都不知道怎麼做……
於是就直接打暴力。暴力跳fafa
fa,用樹狀陣列計算逆序對的個數。
後來還有點時間,於是看準了ci≤
2c_i\leq 2
ci≤
2的資料。
於是打了個樹鏈剖分加線段樹來維護。線段樹上每個區間維護的是個大小為3
33的桶和答案,區間合併的時候就是左右兩邊的答案加上左邊權值大於右邊的個數。
打完了之後急著去吃飯,完全沒有調過……
後來發現這個樹鏈剖分沒有分……倒是覆蓋了我的暴力……原來暴力是可以吃掉ci≤
2c_i\leq 2
ci≤
2的資料的……
看到正解的時候我也震驚了……
請用腦子模擬一下操作的畫面。
然後試著跟lct
lctlc
t建立聯絡。
於是我們就發現這個操作過程與lct
lctlc
t神似!
每個s pl
ay
splay
spla
y維護權值相同的一條鏈,修改的時候相當於acc
es
saccess
access
上去……
將它到祖先的路徑全部變成同乙個權值。
我們也知道lct
lctlc
t的時間複雜度是均攤lgn
\lg n
lgn的。雖然不會證明。
那麼我們可以理解成出現過的顏色相同的段數是o(n
lgn)
o(n\lg n)
o(nlgn)
級別的。
詢問的時候用樹狀陣列來維護。模擬acc
es
saccess
access
的過程就可以了。
於是這題就非常輕鬆地ac了。而且由於這題完全不需要mro
ot
mroot
mroo
t操作,所以也不用翻轉……
l ct
lctlc
t短得跟樹鏈剖分差不多……
using
namespace std;
#include
#include
#include
#define n 100010
int n;
int c[n]
,maxc;
int*p[n]
;inline
bool
cmpp
(int
*x,int
*y)int t[n]
;#define lowbit(x) ((x)&(-(x)))
inline
void
add(
int x,
int c)
inline
intquery
(int x)
inline
void
clear
(int x)
struct node
inline
bool
getson()
inline
void
rotate()
else
z->c[y-
>
getson()
]=this
;int k=
getson()
; fa=z;
y->c[k]
=c[k^1]
; c[k^1]
->fa=y;
c[k^1]
=y; y-
>fa=
this
; siz=y-
>siz,y-
>
update()
;}inline
void
splay()
rotate()
;}}} d[n]
,*null;
intmain()
*p[i]
=maxc;
} null=d;
*null=
;for
(int i=
1;i<=n;
++i)
d[i]=;
for(
int i=
1;i++i)
printf
("%lld\n"
,ans)
; d[v]
.fa=
&d[u]
;for
(x=&d[v]
,y=null;x!=null;y=x,x=x-
>fa)
y->is_root=c[v];}
return0;
}
在分析複雜度的時候,可以試著結合自己學過的資料結構……
JZOJ6258 省選模擬8 9 轟炸
給你一棵樹和樹上的許多條從後代到祖先的鏈,選擇每條鏈需要一定代價,問覆蓋整棵樹的所有點的最小代價是多少。n m 100000 n,m leq 100000 n,m 10 0000 由於時間過於久遠,所以直接說正解算了 對於這樣的題,顯然有一種暴力的dp做法。設f i,jf fi,j 表示i ii子樹...
JZOJ6258 省選模擬8 9 轟炸
給你一棵樹和樹上的許多條從後代到祖先的鏈,選擇每條鏈需要一定代價,問覆蓋整棵樹的所有點的最小代價是多少。n,m leq 100000 由於時間過於久遠,所以直接說正解算了 對於這樣的題,顯然有一種暴力的dp做法。設 f 表示 i 子樹全部被覆蓋,其中伸出來的一條鏈到達深度為 j 的祖先時的最小代價。...
JZOJ 省選模擬 string
一行乙個整數表示答案。sample input 樣例輸入 3 3sample output 樣例輸出 首先我們忽略重複的字串,定義 n 表示長度為 n 的回文串,或由兩個回文串拼成的字串數量。那麼可以通過列舉第乙個回文串的長度 可以為 0 可以算出f n 但是正如剛才所說,會對如 abaaba 這樣...