c030: P50 小群體(APCS 106第一梯次)
Tags : Python
Accepted rate : 1人/1人 ( 100% ) [非即時]
評分方式:
Tolerant

最近更新 : 2025-01-06 17:00

Content

 

Q 同學正在學習程式,P 老師出了以下的題目讓他練習。 一群人在一起時經常會形成一個一個的小群體。假設有 N 個人,編號由 0 到 N-1,每 個人都寫下他最好朋友的編號(最好朋友有可能是他自己的編號,如果他自己沒有其 他好友),在本題中,每個人的好友編號絕對不會重複,也就是說 0 到 N-1 每個數字 都恰好出現一次。 這種好友的關係會形成一些小群體。例如 N=10,好友編號如下,

 

0的好友是4,4的好友是6,6的好友是8,8的好友是5,5的好友是0,所以0、4、6、8、和5就形成了一個小群體。另外,1的好友是7而且7的好友是1,所以1和7形成另一個小群體,同理,3和9是一個小群體,而2的好友是自己,因此他自己是一個小群體。總而言之,在這個例子裡有4個小群體:{0,4,6,8,5}、{1,7}、{3,9}、{2}。本題的問題是:輸入每個人的好友編號,計算出總共有幾個小群體。

Q同學想了想卻不知如何下手,和藹可親的P老師於是給了他以下的提示:如果你從任何一人x開始,追蹤他的好友,好友的好友,….,這樣一直下去,一定會形成一個圈回到x,這就是一個小群體。如果我們追蹤的過程中把追蹤過的加以標記,很容易知道哪些人已經追蹤過,因此,當一個小群體找到之後,我們再從任何一個還未追蹤過的開始繼續找下一個小群體,直到所有的人都追蹤完畢。

Input
Output
Sample Input #1
10
4 7 2 9 6 0 8 1 5 3
Sample Output #1
input n:input data:[4, 7, 2, 9, 6, 0, 8, 1, 5, 3]
0 4
4 6
6 8
8 5
5 0 1
1
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (100%): 1.0s , <1K
Hint :
Tags:
Python
出處:
[管理者: zero(育達管理員) ]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」