對於每只動物i建立3個元素i-a,i-b,i-c,並用這3*n個元素建立並查集。這個並查集維護如下資訊:
(1)i-x表示「i屬於種類x」。
(2)並查集裡的每乙個組表示組內所有元素代表的情況都同時發生或不發生。
例如,如果i-a和j-b在同乙個組裡,就表示如果i屬於種類a那麼j一定屬於種類b,如果j屬於種類b那麼i一定屬於種類a。因
此,對於,每一條資訊,只需按照下面進行操作就可以了。
(1)第一種,x和y屬於同一種。。。合併x-a和y-a,x-b和y-b,x-c和y-c。
(2)第二種,x吃y。。。合併x-a和y-b,x-b和y-c,x-c和y-a。
不過在合併之前,需要先判斷合併是否會產生矛盾。例如在第一種資訊的情況下,需要檢查比如x-a和y-b或者y-c是否在同一組等信 息。
#include #include using namespace std;
const int maxn = 100005;
int n,k;
int d[maxn],x[maxn],y[maxn];
int pa[maxn*3];
int findset(int x)
void unite(int x,int y)
bool same(int x,int y)
void solve()
if(t == 1)
}else}}
printf("%d\n",ans);
}int main()
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是...