帶權並查集 poj1182

2022-05-08 10:15:08 字數 598 閱讀 1401

首先要注意核心**

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#include

#include

using

namespace

std;

const

int maxa = 50005

;int

fa[maxa];

intnum[maxa];

int find(int

i)int

main()else}}

printf(

"%d\n

", sum);

}

view code

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