並查集,帶權並查集

2021-09-23 06:13:07 字數 1005 閱讀 6238

題意:ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,

其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 。例如a與b熟悉and  b與c熟悉,d與e熟悉,此時至少需要兩張桌子。

輸入:t表示樣例個數,n表示朋友個數,朋友從1到n編號,m表示已知相互了解的對數,接著m行。每行表示相互熟悉的編號

輸出:至少需要準備的桌子個數

//簡單並查集

#includeint pre[1200];//儲存每個節點的根節點

int root(int a)//查詢根節點

void join(int a, int b)//合併操作

}int main()

while(m --)

for(i = 1; i <= n; i ++)

}printf("%d\n",n-num);

}return 0;

}

hdu - 3038

題目大意:有m個數,不知道它們具體的值,但是知道某兩個數之間(包括這兩個數)的所有數之和,現在給出n個這樣的區間和資訊,需要判斷有多少個這樣的區間和與前邊已知的區間和存在矛盾。例如給出區間和[1,4]為20,[3,4]為15,再給出[1,2]為30,顯然這個[1,2]的值就有問題,它應該為20-15=5。

//帶權並查集

#includeint pre[200009],sum[200009];//每個節點的根節點,根節點到此點的區間和

int find(int a)

}int main()

ans = 0;//出錯的資訊數

while(m --)

else//否則,進行合併操作

並查集和帶權並查集

並查集是乙個很高效演算法,理解起來也很簡單,寫起來更簡單。fat i i 找到乙個點的祖先 int findfat int x 二中的方法肯定不好,因為如果資料比較極端,那麼並查集就退化成乙個鏈了 如果加入了路徑壓縮,並查集這個演算法就更高效了。int findfat int x 遞迴寫法 int ...

並查集與帶權並查集

1.找點的祖先 fa i i 並查集的快主要在於路徑壓縮。1 遞迴寫法 int find int x 2 非遞迴寫法 int find int x return r 2.合併 合併2者的集合。void merge int x,int y 3.帶權並查集 一般是存下一些2者之間的具體的數量關係或者是統...

帶權並查集種類並查集

帶權並查集 種類並查集 例題 種類並查集 洛谷 p2024 食物鏈 與普通並查集不同是新增加屬性 group i group i 表示它和fa i 的關係,對於這三種種類,同類可以用 0表示,其他兩種分別用 1表示該結點被父節點吃,2表示該節點吃父節點。舉個例子 現在有 pa 3 4 group 3...