poj 1182 食物鏈 並查集

2021-12-29 19:41:41 字數 812 閱讀 6156

這是並查集最後一題,據說也是最經典的一題。經常前面幾題的訓練,這題的思路很快

就能想出來了。只需要對每個節點附加乙個資訊表示離根節點的距離,並且距離是模3迴圈的。

注意合併時候保持距離變化的正確性。而且合併有2種情況,距離相同合併和距離不同合併。

分別對應於題目描述中的1和2操作。

關鍵還是findset裡面對距離ndis陣列裡面的修改,前面一直寫錯這個,wa了好幾次,還是

看隊友**才一眼發現我又把這裡寫錯了。。。當前距離的更新還是等於當前距離加上前乙個

節點的距離再模3,類似於前面幾題的更新方法。

這種將有關係的節點放在乙個並查集裡面,再給每個節點附加其它資訊描述其它關係的做法,

確實比較有效。。。並查集是應用於不相交集合的資料結構,看來某個時候卻有妙用啊。。。

**如下:

#include

#include

#include

using namespace std;

const int max = 50010;

int nn, nk;

int nsets[max];

int ndis[max];

void makesets(int nn)

}int findset(int ni)

return nsets[ni];

}int main()

else

}else

}else

}else}}

}printf("%d\n", nans);

return 0;

}

POJ 1182 食物鏈 並查集

此題利用並查集解決。對於每只動物i建立3個元素i a,i b,i c,並用這3 n個元素建立並查集。1 i x表示 i屬於種類x 2 並查集你的每一組表示組內所有元素代表的情況同時發生或不發生。對於每一條資訊,只需要按照下列操作即可 1.第一種 x,y同類,合併x a和y a x b和y b x c...

POJ 1182 食物鏈 (並查集)

食物鏈time limit 1000ms memory limit 10000k total submissions 48713 accepted 14202 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編...

POJ 1182 食物鏈(並查集)

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