小z高中的時候特別喜歡生物,在一次做實驗的過程中,小z配置了n個培養皿,每個培養皿中有著若干種類的細菌,但由於實驗室的培養皿數量有限,老師要求小z盡可能少地使用培養皿。為此,小z只得將一些培養皿進行混合,但由於一些生物上的特殊要求,只有含有相同細菌的培養皿才能混合,否則細菌將全部死亡。這時候小z想請求你——csu(california state university)最厲害的程式設計高手,希望你幫忙解答出至少需要多少培養皿。
第一行為t(t ≤10),表示有t組資料。
每一組資料首先是乙個正整數n(1 ≤ n ≤ 1000),
接下來n行,每行首先乙個數k,表示這乙個培養皿中有k(1 ≤ k ≤ 100)種細菌,
接下來k個數,a_1,a_2,…,a_k,(1 ≤ a_i ≤100000)。
每個數代表一種細菌的編號,編號之間通過空格隔開,培養皿中的細菌均不相同。
輸出最少需要的培養皿數量,每組資料的答案佔一行
2
33 1 2 3
3 3 9 7
3 4 5 10
41 1
3 1 2 3
1 44 8 7 4 5
2
2
給出n個培養皿,每個培養皿裡面有k種細菌,如果兩個培養皿包含相同的至少一種相同的細菌,那麼他們可以合併,最後問至少需要幾個培養皿。
根據題意,很容易就能想到並查集。每個培養皿都相當於是乙個集合,如果含有相同的細菌,就直接把並查集合並。這個題也沒必要建圖,直接把每個培養皿中的第乙個細菌作為父節點即可。最後再遍歷每個父節點(父節點的p[x]==x)做並查集,如果查詢結果是他本身,就需要乙個培養皿,累加即可得出結果。
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 1e5+5;
set s;
int p[maxn];
int find(int x)
int main()
else}}
int ans=0;
for(set
::iterator it=s.begin(); it!=s.end(); it++)
printf("%d\n",ans);
}return
0;}
CSU 2125小Z的培養皿(並查集)
感謝大佬 description 小z高中的時候特別喜歡生物,在一次做實驗的過程中,小z配置了n個培養皿,每個培養皿中有著若干種類的細菌,但由於實驗室的培養皿數量有限,老師要求小z盡可能少地使用培養皿。為此,小z只得將一些培養皿進行混合,但由於一些生物上的特殊要求,只有含有相同細菌的培養皿才能混合,...
小z的襪子
作為乙個生活散漫的人,小z每天早上都要耗費很久從一堆五顏六色的襪子中找出一雙來穿。終於有一天,小z再也無法忍受這惱人的找襪子過程,於是他決定聽天由命 具體來說,小z把這n只襪子從1到n編號,然後從編號l到r l 儘管小z並不在意兩隻襪子是不是完整的一雙,甚至不在意兩隻襪子是否一左一右,他卻很在意襪子...
小Z的AK計畫
洛谷鏈結 在小z的家鄉,有機房一條街,街上有很多機房。每個機房裡都有一萬個人在切題。小z剛刷完codechef,準備出來逛逛。機房一條街有 n 個機房,第 i 個機房的座標為 xi 小z的家座標為 0。小z在街上移動的速度為1,即從 x1 到 x2 所耗費的時間為 x1 x2 每個機房的學生數量不同...