題解 洛谷P2024 食物鏈 並查集

2021-08-21 15:51:12 字數 760 閱讀 5622

這次再發一遍是因為由關押罪犯get到了一種新的做法。將並查集開到n*3,對於某個動物a來說,a+n代表它吃的動物,a+2n代表吃它的動物,這樣我們就可以進行普通的並查集操作來得到答案了。注意判斷前後話語是否矛盾時應當分情況,如果是b,c同類,那麼如果b和c吃的動物或者c和b吃的動物在同乙個集合裡,那就是假話;如果b吃c,那麼如果b,c是同類或者b與c吃的動物在同乙個集合裡,就是假話。對於真話來說,如果b,c是同類,那麼就將b,c、b+n,c+n、b+2n,c+2n合併;如果b吃c,那麼將b吃的動物(b+n)與c合併,將吃b的動物b+n*2與c吃的動物c+n合併(環狀食物鏈),將b與吃c的動物(c+2*n)合併。最後輸出答案即可

#include#include#include#include#includeusing namespace std;

const int maxn=50010;

int t;

int ans=0;

int n;

int fa[maxn*3];

int find(int x)

void merge(int x,int y)

}bool check(int x,int y)

int main()

while(t--)

if(a==2&&b==c)

if(a==1)

}if(a==2)

}if(a==1)

if(a==2)

} cout

}

洛谷 P2024 食物鏈(並查集)

題意 有三種生物a,b,c,它們的關係是a吃b,b吃c,c吃a。現在給出一些語句,判斷是否是假話,輸出假話數量。輸入類似 a x y,如果a等於1,說明x,y是同類,a等於2說明x是y的天敵。思路 經典的並查集題目,用x表示生物本身,x n表示它的獵物,x 2 n表示它的敵人,具 體請看 注釋。如下...

種類並查集 洛谷 P2024 食物鏈

動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示...

洛谷 P2024 食物鏈(擴充套件域並查集)

動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示...