description
在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?!
dyj分析了一下所有營員的地域關係,發現有些營員是乙個城市的,其實他們只需要一張就可以了,因為乙個人拿到光碟後,其他人可以帶著u盤之類的東西去拷貝啊!
他們願意某一些人到他那兒拷貝資料,當然也可能不願意讓另外一些人到他那兒拷貝資料,這與我們fjoi宣揚的團隊合作精神格格不入!!!
現在假設總共有n個營員(2<=n<=200),每個營員的編號為1~n。dyj給每個人發了一張調查表,讓每個營員填上自己願意讓哪些人到他那兒拷貝資料。當然,如果a願意把資料拷貝給b,而b又願意把資料拷貝給c,則一旦a獲得了資料,則b,c都會獲得資料。
現在,請你編寫乙個程式,根據**上來的調查表,幫助dyj計算出組委會至少要燒錄多少張光碟,才能保證所有營員回去後都能得到夏令營資料?
input
先是乙個數n,接下來的n行,分別表示各個營員願意把自己獲得的資料拷貝給其他哪些營員。即輸入資料的第i+1行表示第i個營員願意把資料拷貝給那些營員的編號,以乙個0結束。如果乙個營員不願意拷貝資料給任何人,則相應的行只有1個0,一行中的若干數之間用乙個空格隔開。
output
乙個正整數,表示最少要燒錄的光碟數。
sample input 1
52 4 3 0
4 5 000
1 0sample output 1
圖的連通,把每個人看作圖里的乙個點,先把圖連通然後讓每個點指向他們 的父節點(也就是願意給他們光碟的人),最後只要找到父節點是自身的點有多少個即可
**:
#include
using namespace std;
const
int maxn =
1e3+5;
const
int inf =
0x3f3f3f3f
;int p[maxn]
;int e[maxn]
[maxn]
;int
main()
}for
(int i =
1; i <= n ; i++
) p[i]
= i;
for(
int k =
1; k <= n ; k++)}
for(
int i =
1; i <= n ; i++)}
int cnt =0;
for(
int i =
1; i <= n ; i++)if
(p[i]
== i)
cnt++
; cout << cnt << endl;
return0;
}
1383 燒錄光碟 cdrom
在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?dyj分析了一下所有營員的地域關係,發現有些營員是乙個城市的,其實他們...
1383 燒錄光碟 cdrom
在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?dyj分析了一下所有營員的地域關係,發現有些營員是乙個城市的,其實他們...
linux 燒錄光碟
1.檢視 燒錄機名稱和最大寫入速度 cat proc sys dev cdrom infowodim prcap or cdrecord prcap 以上兩種方法任選其一 2.掛載光碟 如果不能自動掛載 ls l dev grep cdrom mount dev cdrom mnt 第一條命令結果的...