poj1182 食物鏈 並查集應用

2021-07-29 10:17:51 字數 883 閱讀 5038

//用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吃cy,cx吃ay,此時用合併x+n,y+2n和y+2n來表示(不會再出現bx吃ay等,因為已經有ax吃by,兩種情況只能發生一種)

//並查集中合併在一組的所有元素代表情況同時發生或不發生 比如:a中i吃b中j,就表示如果i屬於a,j一定屬於b 或 如果j屬於b,i一定屬於a

//合併前先進行判斷如果出現矛盾,就表示此語句是錯誤資訊

//判斷:1資料範圍 2合併同類關係時,判斷是否有捕食關係 3合併捕食關係,判斷是否有同類關係和反捕食關係

#include #include const int max_n = 50010;

const int max_k = 100010;

int n, k;

int t[max_k], x[max_k], y[max_k]; //輸入(t是資訊的型別)

int par[max_n * 3];

int rank[max_n * 3];

void init(int n)

}int find(int x)

void unite(int x, int y)else

}bool same(int x, int y)

void solve()

if(t == 1)else

}elseelse

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

}int main()

並查集應用食物鏈poj1182

由於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...

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