帶權並查集 模板 HDU 3038

2022-06-03 18:42:15 字數 1342 閱讀 1503

tt 寫一串數字,對 ff 不可見

ff 選擇乙個區間(會重複操作), tt 把這個區間的和告訴 ff,然後,一些和是不正確的,所以,有一些答案是矛盾的,根據這些矛盾求出答案錯誤的個數。

注意兩點:1、tt 給的乙個 和 是正確的,如果它與之前給的 和 不矛盾。

2、ff 發現乙個與之前矛盾的 和 之後,該 和 不再參與之後的分析,直接被拋棄了。

題意:給出區間[1,n],下面有m組資料,l r v區間[l,r]之和為v,每輸入一組資料,判斷此組條件是否與前面衝突 ,最後輸出與前面衝突的資料的個數.

比如 [1 5]區間和為100 然後後面給出區間[1,2]的和為 200 那肯定就是有問題的了。

部落格:首先要先知道帶權路徑壓縮的寫法:

int find(int

x)

return

pre[x];

}

還有帶權並查集合並:

這題我們利用乙個sum陣列儲存從某點到其祖先節點距離。

通過處理,帶權並查集每個節點的sum值都是其指向父親節點的權值

中間如果經歷過了路徑壓縮,就是指向祖先的權值

注意,給出區間的 l 和 r可能相同,而就無法用並查集這個資料結構來做了,所以存入時要把 l- - 或者r ++

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf (1<<30)

using

namespace

std;

const

int maxn = 2e5+7

;int

sum[maxn];

intpre[maxn];

int find(int

x)

return

pre[x];

}int

main()

int fa,fb,a,b,s,ans=0

;

while(m--)

}else

}printf(

"%d\n

", ans);}}

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

HDU 3038 帶權並查集

題目大意 n表示有乙個長度為n的陣列,接下來有m行形如x,y,d的輸入,表示從第x,個元素到第y個元素的和為d 包括x,和y 問m行輸入裡面有幾個是錯誤的 第乙個輸入是正確的 思路參考 這題你不告訴我是並查集,我怎麼想得到。複習一下帶權並查集吧。用dis陣列維護乙個點到他當前父親節點的距離,那麼在f...