黑白樹 jzoj 3973

題目

給定一棵樹,邊的顏色爲黑或白,初始時全部爲白色。維護兩個操作:
1. 查詢 u 到根路徑上的第一條黑色邊的標號。
2. 將 u 到 v 路徑上的所有邊的顏色設爲黑色。

分析

先將所有操作正着進行一遍,將所有的黑邊相鄰的點按照關係合併,就是一個集合中的代表元素一定是深度最小的點。
然後找出所有自始至終都是白色的邊,以及每條邊變黑的時間。將白邊用並查集合並
倒着做所有的操作,對於染黑操作如果我們撤銷相當於染白,將是所有在當前操作中變黑的邊的兩端用並查集合並,可以直接遍歷路徑,做法與合併黑邊時類似。(也可以按照每條邊變黑的時間排序,然後直接合並每一條邊,這樣就不用遍歷路徑了)
對於每次的查詢操作直接找集合的代表元素,代表元素與其父節點之間的邊就是答案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章