帶權並查集

2021-09-26 01:45:50 字數 1616 閱讀 7755

把n個元素分成一些元素的集合,需要反覆查該元素所在的集合。

主要思路:把每個節點壓縮到祖先節點的子節點,使查詢時用的時間更少

//存每個節點的父親節點下標,祖先為0,所以初值賦0

intparent

(int n)

//求出祖先節點並壓縮路徑

void

add(

int x,

int y)

最後查詢只需要看父節點是否相同就能判斷是不是在一棵樹,時間複雜度o(1)。

加乙個陣列用於儲存每個節點到父節點的權值,同時add函式和parent函式也要加上權值修改

小hi的學校總共有n名學生,編號1-n。學校剛剛進行了一場全校的古詩文水平測驗。

學校沒有公布測驗的成績,所以小hi只能得到一些小道訊息,例如x號同學的分數比y號同學的分數高s分。

小hi想知道利用這些訊息,能不能判斷出某兩位同學之間的分數高低?

input

第一行包含三個整數n, m和q。n表示學生總數,m表示小hi知道訊息的總數,q表示小hi想詢問的數量。

以下m行每行三個整數,x, y和s。表示x號同學的分數比y號同學的分數高s分。

以下q行每行兩個整數,x和y。表示小hi想知道x號同學的分數比y號同學的分數高幾分。

對於50%的資料,1 <= n, m, q <= 1000

對於100%的資料,1 <= n, m, q<= 100000 1 <= x, y <= n -1000 <= s <= 1000

資料保證沒有矛盾。

output

對於每個詢問,如果不能判斷出x比y高幾分輸出-1。否則輸出x比y高的分數。

每次輸入判斷x祖先是否是y祖先,如果是則不進行操作,如果不是則把y節點的祖先節點的父節點設為x,並修改y節點的祖先節點的權值,須注意權值有方向,求權值時應注意向量的加減法則

;//q為權值陣列

void

init()

//初始化

和上訴類似,區別是設如果互動則權值為1判斷兩個蟲子的權值是否是奇數,如果不是則說明是同性戀

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

帶權並查集

食物鏈 time limit 1000ms memory limit 10000k total submissions 71395 accepted 21146 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...

帶權並查集 then

問題 b 便 時間限制 2 sec 記憶體限制 512 mb 提交 50 解決 14 題目描述 給出乙個r c的棋盤.共有r行c列,r c個格仔.現要在每個格仔都填乙個非負整數.使得任意乙個2 2的正方形區域都滿足這樣的性質 左上角的數字 右下角的數字 左下角的數字 右上角的數字.有些格仔已經確定,...