並查集應用食物鏈poj1182

2021-07-04 02:49:04 字數 650 閱讀 4960

由於n,k大需要高效的維護動物之間的關係

快速判斷是否產生矛盾

對於每只動物建立3個元素i-a,i-b,i-c,

並用這3*n個元素建立並查集

並查集裡的每乙個組表示組內所有元素代表的情況都同時發生或不發生

第一種,x和y屬於同一種類,合併x-a和y-a,x-b,y-b,x-c和y-c

第二種,x吃y。。。。。。。。。合併x-a和y-b,  x-b和y-c, x-c和y-a

在合併前要注意矛盾的情況:第一種,x和y要必須是屬於同一類的,所以要排除a,b和a,c的情況

第二種,x不許滿足a,b

#includeusing namespace std;

#define max_k 150000

int n,k;

int t[max_k],x[max_k],y[max_k];

int par[max_k*3];

int rankk[max_k*3];

void init(int n)

}int find2(int x)

void unite(int x,int y)

{ x=find2(x);

y=find2(y);

if(x==y) return ;

if(rankk[x]

poj1182 食物鏈 並查集應用

用3 n的空間建立並查集,0 n 1,n 2n 1,2n 3n 1三個區間分別表示abc三個種類 同類 若xy同類,合併xy說明xy屬於a類,當然也可能屬於b,c類,此時合併x n,y n和x 2n,y 2n表示他們分別屬於b和c類 捕食 若x吃y,合併x和y n,表示a中x吃b中y,當然也可能bx...

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編...