洛谷 P2024 NOI2001 食物鏈

2022-05-16 11:51:01 字數 1171 閱讀 7643

思路:種類並查集,搗鼓搗鼓把題a了,但是沒咋懂,列入學習清單,參考了這篇部落格和這篇部落格

**:

1

//#include

2 #include3 #include4 #include5 #include

6 #include7 #include8 #include9 #include10 #include

11 #include12

#define inf 0x3f3f3f3f

13using

namespace

std;

14 typedef long

long

ll;15

const

int m = int(1e5) * 3 + 5;16

struct

node

17root[m];

21void init(int

n)2228}

29int find(int

x)30

36return root[x].id;

*/37

if (x == root[x].id) return

x;38

int temp =root[x].id;

39 root[x].id =find(temp);

40 root[x].re = (root[x].re + root[temp].re) % 3;41

return

root[x].id;42}

43//

void merge(int x, int y)

44//

49signed main()

5064

if (op == 2 && x ==y)

6569

int xx =find(x);

70int yy =find(y);

71if (xx !=yy)

7276

else

7783

if (op == 2 && (3 - root[x].re + root[y].re) % 3 != op - 1)84

88}89}

90 cout << sum <91return0;

92 }

備註:關鍵是關係域的更新的公式,用向量的方式去思考會更好理解一點

洛谷P2024 NOI2001 食物鏈

題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...

洛谷 P2024 NOI2001 食物鏈

這是一道並查集的題目。我們先來分析一下題目。有三種動物,a 吃 b,b吃 c,c 吃 a。那麼對於乙個動物來說,另乙個動物就有了三種情況 同類,天敵以及獵物。很容易可以想到,僅僅是利用普通的並查集已經無法滿足需要了,因為我們有三種情況需要表示。僅僅表示同類可以只用一倍長度的陣列,那麼如果是用三種關係...

P2024 NOI2001 食物鏈(洛谷)

題目傳送門 核心解法 並查集 關鍵要理清楚這些關係是怎樣的 即通過了解題意可知 假設現在有如下三種動物型別 老虎,老虎的食物,老虎的天敵。所輸入的x y都只滿足這三種型別 輸入m次去判斷關係 x y是兩個獨立的未知種類的動物 即不知道是老虎本體 食物還是天敵 現在需要通過構建且查詢個體間的關係,因此...