首先要注意核心**
int find(int i)
不能寫成
int find(int i)
如果這樣的話fa指的就不是他的father而是他的祖先算num的時候會發生錯誤
而後37,8行不能這樣寫
num[find(y)] = (num[x] + (3-a) + 3-num[y]) %3;//這是會造成最祖先不是0 接下來find是會錯誤
fa[find(y)] = fx;
由這件事我們知道做帶權並查集時要是可保證最祖先權值為零,預處理出所有要求的最祖先也是乙個好習慣。
#include#includeview code#include
using
namespace
std;
const
int maxa = 50005
;int
fa[maxa];
intnum[maxa];
int find(int
i)int
main()else}}
printf(
"%d\n
", sum);
}
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 includeconst int n 50005 int p n r n n,k void init int x int fi...
POJ 1182 帶權並查集
食物鏈 time limit 1000ms memory limit 10000k total submissions 89563 accepted 26905 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...