很好的並查集問題。
題目不是很難理解 : 有3類動物,對於每一類動物分別存在它的獵物、天敵、與同類。不難看出我們需要開三個並查集去儲存每乙隻動物的獵物、天敵、與同類。
處理每一次遇到的話:
首先判斷它是關於同類的敘述還是天敵的敘述,對於這次所涉及的動物x與y:
1、同類:首先判斷y存不存在於x天敵或者是獵物的並查集中,如果兩者都不存在,那麼一定是同類了,說明當前的宣告的是真話,並進行將y合併到x同類的並查集中、x合併到y同類的並查集中的操作;否則當前的宣告的是假話,ans++,並跳過所有操作。
2、y是x的獵物:首先判斷y存不存在於x天敵或者同類的並查集中,如果兩者都不在的話,y一定是x的獵物了,說明當前的宣告是真話,並進行將y合併到x獵物的並查集中、x合併到y天敵的並查集中的操作;否則說明當前的宣告是假話,ans++,並跳過所有操作。
直觀感受一下:
其實只用開乙個並查集,這個並查集不同的區間代表不同的類別(獵物、天敵、與同類),如上圖。
ok & ac。
**:
#include const int n = 500000 + 5 ;
int f [ n ] , n , k , ans , ok , y , x ;
int find ( int x )
int main ( )
if ( ok == 1 )
}else
if ( find ( x ) == find ( y ) || find ( x + 2 * n ) == find ( y ) )
ans ++ ;
else }}
printf ( "%d" , ans ) ;
return 0 ;
}
洛谷2024食物鏈
題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...
洛谷2024 食物鏈
題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...
NOI2001 洛谷2024 食物鏈
題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...