並查集 解決區間和糾錯問題 hdu 3038

2022-07-18 08:57:12 字數 682 閱讀 5419

題目:多次給出資訊,告訴你[a,b]區間的和,求多少個錯誤資訊(錯誤資訊不考慮)。

乍一看有點像線段樹,但想想就發現這個並不能用線段樹方便地解決。後來經提醒是並查集的一種經典題型。

把區間抽象為並查集的子節點和母根結點,子節點存放了到根節點的區間和。這樣當引入乙個新的區間,如果區間左右界根節點不同就一定不存在矛盾(有點種類並查集的意思,形象來看就是存在冗餘區間用於調整),然後可以通過現存集合推導出子節點到根節點的區間和。如果根節點相同則要判斷一下是否矛盾(畫個圖對線段加加減減就能推出公式了,文字不太好描述)。

這裡注意一下數字是存在於端點上的,所以為了便於模擬,將小節點值--,或者將大節點++(注意不要溢位哦)。

#include #include 

#define ll long long int

using

namespace

std;

int pre[200005

];ll val[

200005

];int find(int

x)void

ini()

intmain()

;

if(t[0]==t[1

])

else

}cout

}return0;

}

並查集解決朋友圈問題

首先我們來看一道題筆試題,關於朋友圈的問題 解決這個問題,我們可以用並查集來解決。並查集是一種資料結構,用於處理不相交集合中的合併以及查詢問題,將n個元素分成一組不相交的集合,開始時我們把每乙個元素當成乙個集合,然後按規律將集合合併。舉例說明,首先定義乙個只有10個元素的陣列,並將每個元素的值設定為...

並查集解決朋友圈問題

題目 加入已知n個人和m對好友關係 存於陣列r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。例如 n 5,m 3,r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1,2,3屬於同乙個朋友圈,4和5屬於另乙個朋友圈...

利用並查集解決節點互聯問題

節點連通問題一般來說有兩個思路 1 化作圖論問題,是否連通變為深度 廣度優先搜尋,連通個數為連通分量 2 構造並查集解決 兩者 複雜度差不多但並查集時間複雜度更低 注意 只適用於無向圖的情況 class unionfind void put int origin,int target while i...