這是並查集最後一題,據說也是最經典的一題。經常前面幾題的訓練,這題的思路很快
就能想出來了。只需要對每個節點附加乙個資訊表示離根節點的距離,並且距離是模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是...