題意: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...