小雷的冰茶几problem description
小雷有個特殊的癖好,平時喜歡收藏各種稀奇古怪的東西,譬如。。。。,還有。。。。,也包括。。。。。小雷是乙個喜歡分享的童鞋,這次小雷又給大家帶來一套神奇的東西,那就是舉世無雙的冰茶几!
顧名思義,這些茶几被冰凍住了,最主要的是他們是易碎品,畢竟被凍住了。因此小雷要很小心翼翼的移動他們。一些茶几是凍在一起的,因此一套冰茶几分為好幾部分,並且如果茶几a與b凍在一起,b與c凍在一起,那麼a與c也就凍在了,即冰凍狀態有傳遞性,abc此時會看作乙個整體。
為了保證冰茶几的完整性,小雷每次只能移動一整塊冰茶几,也就是冰凍在一起的一部分。小雷想知道他需要搬幾次才能全部搬到實驗室,你能幫小雷快速計算出答案麼?
input
多組輸入,先輸入組數t(1 < = t < = 200)。
對於每組輸入,先輸入乙個整數n(1 < = n < = 100000),k(0 < = k < = 100000),茶几編號1~n。
之後k行,每行兩數x,y(1 < = x,y < = n),表示第x個茶几和第y個茶几冰凍在一起。
output
對於每組輸入,先輸出」case z: 」(不帶引號)表示組數,再輸出乙個整數,表示小雷需要搬動的次數。
sample input3
3 11 2
5 21 2
3 45 2
1 22 3
sample output
case 1: 2
case 2: 3
case 3: 3
推薦閱讀並查集的原理:
**:
#include #include #include #include #include #include using namespace std;
int pre[100005];
int n,m;
int root(int x)
while ( i!=x )
return x;
}// 還有一種簡潔的root的壓縮路徑的方式,在帶權並查集中用到的。
/*int root(int x)
return pre[x];}*/
void join( int a, int b ) // 找大領導是誰
}int main()
for ( i=1; i<=m; i++ )
int ans = 0;
for ( i=1; i<=n; i++ )
}cout << "case " << cnt << ": " << ans << endl;
}return 0;
}
經典演算法 並查集
概述 並查集 union find sets 是一種非常精巧而實用的資料結構,它主要用於處理一些不相交集合的合併問題。一些常見的用途有求連通子圖 求最小生成樹的 kruskal 演算法和求最近公共祖先 least common ancestors,lca 等。使用並查集時,首先會存在一組不相交的動態...
並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
poj1703 經典並查集
一道非常經典的並查集,建議還可以做下hdu5971,這樣我感覺一般的並查集就並沒有神馬威脅了。祭奠我為此付出的好幾天時間。懶得加注釋,真的要想搞懂的話建議花時間自己看懂,畢竟ac 已經寫出來了。但是實在不會的話詳詢 qq1933160466。23333333333333333333333333333...