JZOJ 3910 Idiot 的間諜網路

2022-06-13 14:36:08 字數 1785 閱讀 8378

作為一名高階**,idiot 苦心經營多年,終於在敵國建立起一張共有n 名**的龐大間諜網路。

當然,出於保密性的要求,間諜網路中的每名**最多隻會有一名直接領導。現在,idiot 希望整理有關歷次特別行動的一些資訊。

初始時,間諜網路中的所有**都沒有直接領導。之後,共有m 次下列型別的事件按時間順序依次發生:

• 事件型別1 x y:**y 成為**x 的直接領導。資料保證在此之前**x 沒有直接領導;

• 事件型別2 x:**x 策劃了一起特別行動,然後上報其直接領導審批,之後其直接領導再上報其直接領導的直接領導審批,以此類推,直到某個**審批後不再有直接領導;

• 事件型別3 x y:詢問**x 是否直接策劃或審批過第y 次特別行動。所有特別行動按發生時間的順序從1 開始依次編號。資料保證在詢問之前,第y 次特別行動已經發生過。

作為一名高階**,idiot 當然不會親自辦事。於是,idiot 便安排你來完成這個任務。

第一行兩個正整數n 和m,分別表示間諜網路中的**總數,以及事件的總數。

接下來m 行,第i 行給出第i 個事件的資訊,格式及含義參見題面。

輸出共t 行,其中t 表示詢問的總數。第i 行輸出」y es」 或者」no」,表示第i 次詢問的答案。

6 12

2 11 4 1

3 4 1

1 3 4

2 33 4 1

2 33 4 2

3 1 1

3 1 3

3 1 2

1 2 4

no

noyes

yesyes

yes

對於30% 的資料,n <= 3 *10^3,m <= 5* 10^3; 對於60% 的資料,n <=2 * 10^5,m <= 2 * 10^5; 額外20% 的資料,保證在任意時刻,整張間諜網路由若干條互不相交的鏈構成; 對於100% 的資料,n <= 5 * 10^5,m <= 5 * 10^5; c + + 選手的程式在評測時使用編譯選項-wl;--stack = 104857600。樣例的最後圖變成了:

先考慮第乙個問題,\(x\)是否是\(y\)的祖先。

很顯然,有一種方法是判斷\(lca(x,y)=x\),但實際還有更簡單的方法就是\(dfs\)序。

預處理出某節點在\(dfs\)序加入和退出的時間戳,就可以\(o(1)\)運用了。

還有個問題,我們要求的是在某個時刻,那我們怎麼知道在那個時刻\(x\)是不是\(y\)的祖先?之前說了,這是離線的演算法,所以我們可以先讀入一遍,儲存資料進行操作後,再讀一遍,遇到操作\(1\)就用個並查集表示在某時刻\(x\)和\(y\)才有關係。

sort(a + 1, a + 1 + cnt, cmp);

for (int i = 1; i <= n; i++)

if(!flag[i])

dfs(i); //dfs序

tot = 0;

int j = 1;

for (int i = 1; i <= m; i++)

}}

391 完美矩形

給你乙個陣列 rectangles 其中 rectangles i xi,yi,ai,bi 表示乙個座標軸平行的矩形。這個矩形的左下頂點是 xi,yi 右上頂點是 ai,bi 如果所有矩形一起精確覆蓋了某個矩形區域,則返回 true 否則,返回 false 示例 1 輸入 rectangles 1,...

391 完美矩形問題

我們有 n 個與座標軸對齊的矩形,其中n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,2...

Leetcode 391 完美矩形

我們有 n 個與座標軸對齊的矩形,其中 n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,...