尤拉序的小技巧

louisliang發表於2024-10-19

這裡的尤拉序是指 dfs 時開始和結束時將當前節點加進序列裡。

上圖的尤拉序就是:\(1,2,4,4,3,7,7,3,2,5,5,6,6\)

在尤拉序中,每個點恰好會出現 \(2\) 次,記 \(x\) 第一次出現的位置為 \(dfn_x\)。可以發現 \((dfn_x,dfn_y]\) 中,\(x\)\(y\) 上的鏈恰好出現奇數次(\(1\) 次),其他點出現偶數次(注意,這裡不包括 \(\operatorname{lca}(x,y)\))。

這有什麼用嗎?透過尤拉序,可以把鏈上問題轉換為區間問題,維護一些出現奇數次的資訊,如鏈上的異或和等。