此題利用並查集解決。
對於每只動物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和y-c。
2.第二種:x吃y,,,合併x-a和y-b、x-b和y-c、x-c和y-a。
當然,在合併之前,需要判斷合併是否會產生矛盾,若有矛盾,則結果+1;
**:
#include #include using namespace std;
#define max_k 100000
int par[max_k],rank[max_k];
int t[max_k],x[max_k],y[max_k];
//以下是並查集的函式
void init(int n)
if(t==1) //xy是同類
else
}else //x吃y
else
}} printf("%d\n",ans);
return 0;
}
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是...
poj1182食物鏈 (並查集)
題目在這裡喲 和之前判斷蟲子是否有同性戀一樣 不是因為腦洞太大 都是分層的 取模的啊啊啊啊啊仔細觀察一下兩個 相似度好高好高哦哦 include include includeusing namespace std int total int n,m,a,b,c int f 500005 rank ...