這是一道並查集的題目。我們先來分析一下題目。有三種動物,a 吃 b,b吃 c,c 吃 a。那麼對於乙個動物來說,另乙個動物就有了三種情況:同類,天敵以及獵物。
很容易可以想到,僅僅是利用普通的並查集已經無法滿足需要了,因為我們有三種情況需要表示。僅僅表示同類可以只用一倍長度的陣列,那麼如果是用三種關係,我們是不是可以用三倍長度的陣列呢。
我們不妨來嘗試一下,宣告乙個三倍長度的陣列。第一倍長度表示的是同類關係,第二倍長度表示的是第一倍長度的動物的獵物,第三倍則表示的是天敵。這樣就簡單了,詳細見**注釋。
#include
using
namespace std;
const
int maxn =
50001
;int a[
3* maxn]
;int
find
(int x)
void
unity
(int x,
int y)
intmain()
if(k ==1)
//如果為真,那麼x的同類和y的同類,x的獵物是y的獵物,x的天敵是y的天敵
unity
(x, y)
;unity
(x + n, y + n)
;unity
(x +
2* n, y +
2* n);}
else
unity
(x + n, y)
;unity
(x +
2* n, y + n)
;unity
(x, y +
2* n);}
} cout << ans;
return0;
}
洛谷P2024 NOI2001 食物鏈
題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...
洛谷 P2024 NOI2001 食物鏈
思路 種類並查集,搗鼓搗鼓把題a了,但是沒咋懂,列入學習清單,參考了這篇部落格和這篇部落格 1 include 2 include3 include4 include5 include 6 include7 include8 include9 include10 include 11 include...
P2024 NOI2001 食物鏈(洛谷)
題目傳送門 核心解法 並查集 關鍵要理清楚這些關係是怎樣的 即通過了解題意可知 假設現在有如下三種動物型別 老虎,老虎的食物,老虎的天敵。所輸入的x y都只滿足這三種型別 輸入m次去判斷關係 x y是兩個獨立的未知種類的動物 即不知道是老虎本體 食物還是天敵 現在需要通過構建且查詢個體間的關係,因此...