藍橋杯歷屆試題 Python實現合根植物

2021-10-03 18:49:17 字數 1355 閱讀 5748

w星球的乙個種植園,被分成 m * n 個小格仔(東西方向m行,南北方向n列)。每個格仔裡種了一株合根植物。

這種植物有個特點,它的根可能會沿著南北或東西方向伸展,從而與另乙個格仔的植物合成為一體。

如果我們告訴你哪些小格仔間出現了連根現象,你能說出這個園中一共有多少株合根植物嗎?

第一行,兩個整數m,n,用空格分開,表示格仔的行數、列數(15 4

這道題目剛拿到沒什麼思路,自己也嘗試著做過,但是總是報錯,然後就去網上看了一下,發現了並查集的演算法,然後就照著演算法嘗試了一下,就成功了。所以有時候還是要上網看一下已有演算法並學習更加高效。

global pre #全域性變數pre

deffind

(x):

#找到x的父節點

p=xwhile x!=pre[x]

:##如果x不是他本身,就一直循壞到找到父節點為之

x=pre[x]

while p!=x:

#壓縮路徑,這個是優化的,在本題中我覺得不是很重要,所以可加可不加

p,pre[p]

=pre[p]

,x return x

m,n=

input()

.split(

)cnt=

eval

(m)*

eval

(n)pre=

[i for i in

range

(cnt)]+

[0]*

10000

#初始化乙個足夠大的列表

k=eval

(input()

)for i in

range

(k):

a,b=

input()

.split(

) aa=find(

int(a)

) bb=find(

int(b)

)if aa!=bb:

#如果父節點不一樣就合併,同時合併的話,集合就會少乙個

pre[aa]

=pre[bb]

cnt-=

1print

(cnt)

藍橋杯試題 歷屆試題 郵局

題中的資料量很小,但單純的回溯會超時,所以需要剪枝,這裡減了三個枝。1.當即使所有剩餘點都算上都不能取k個點時。2.當當前點大於k個時。3.當發現加入乙個點後距離陣列沒有變化時,說明這個點可有可無以後不再計算。include include include include using namespa...

藍橋杯試題 歷屆試題 核桃的數量 python

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小張是軟體專案經理,他帶領3個開發組。工期緊,今天都在加班呢。為鼓舞士氣,小張打算給每個組發一袋核桃 據傳言能補腦 他的要求是 各組的核桃數量必須相同 各組內必須能平分核桃 當然是不能打碎的 盡量提供滿足1,2條件的最小數量 節約鬧...

藍橋杯 試題 歷屆試題 幸運數

題目鏈結 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的 篩法 生成 首先從1開始寫出自然數1,2,3,4,5,6,1 就是第乙個幸運數。我們從2這個數開始。把所有序號能被2整除的項刪除,變為 1 3 5 7 9 把它們縮緊...