1383 燒錄光碟 cdrom

2021-08-22 10:33:57 字數 1342 閱讀 7016

在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?!

dyj分析了一下所有營員的地域關係,發現有些營員是乙個城市的,其實他們只需要一張就可以了,因為乙個人拿到光碟後,其他人可以帶著u盤之類的東西去拷貝啊!

他們願意某一些人到他那兒拷貝資料,當然也可能不願意讓另外一些人到他那兒拷貝資料,這與我們fjoi宣揚的團隊合作精神格格不入!!!

現在假設總共有n個營員(2≤n≤200),每個營員的編號為1~n。dyj給每個人發了一張調查表,讓每個營員填上自己願意讓哪些人到他那兒拷貝資料。當然,如果a願意把資料拷貝給b,而b又願意把資料拷貝給c,則一旦a獲得了資料,則b,c都會獲得資料。

現在,請你編寫乙個程式,根據**上來的調查表,幫助dyj計算出組委會至少要燒錄多少張光碟,才能保證所有營員回去後都能得到夏令營資料?

先是乙個數n,接下來的n行,分別表示各個營員願意把自己獲得的資料拷貝給其他哪些營員。即輸入資料的第i+1行表示第i個營員願意把資料拷貝給那些營員的編號,以乙個0結束。如果乙個營員不願意拷貝資料給任何人,則相應的行只有1個0,一行中的若干數之間用乙個空格隔開。

乙個正整數,表示最少要燒錄的光碟數。

5

2 4 3 0

4 5 000

1 0

1
這題很原本用並查集來做的但是只有70分,原因是並查集是雙向的,也就是說用於無向圖,

但是floyed的演算法裡也運用到了並查集的思想,所以說並查集的思想很重要

這題應該也可以用tarjan來算,但是tarjan 剛入門,想不到該咋用,還得多練題

70分並查集**

#includeusing namespace std;

int p[250];

int n;

int findth(int x)

void unionn(int x,int y)

int main()

}int flag=0;

for(int i=1;i<=n;i++)

cout#includeusing namespace std;

int n;

int p[1000];

int main()

}for(int k=1;k<=n;k++)}}

for(int i=1;i<=n;i++)}}

int cnt=0;

for(int i=1;i<=n;i++)

}printf("%d\n",cnt);

return 0;

}

1383 燒錄光碟 cdrom

在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?dyj分析了一下所有營員的地域關係,發現有些營員是乙個城市的,其實他們...

燒錄光碟 cdrom

description 在fjoi2010夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,怎麼辦呢?dyj分析了一下所有營員的地域關係,發現有些營...

SSL 2344 燒錄光碟

n n 個人,每個人都可以把資料拷貝給另乙個人,但每個人只願意拷給他想拷給的人,問需要幾份資料。n role presentation style position relative n n 200一開始想用並查集,但並查集是雙向的,而這題是單向的,所以先跑遍floyed,查詢所有願意拷貝的人,在一...