【題目描述】
有n個同學(編號為1到n)正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。
遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件(注意:可能有人可以從若干人那裡獲取資訊,但是每人只會把資訊告訴乙個人,即自己的資訊傳遞物件)。當有人從別人口中得知自己的生日時,遊戲結束。請問該遊戲一共可以進行幾輪?
【輸入格式】
第1行包含1個正整數n表示n個人。
第2行包含n個用空格隔開的正整數t1,t2,……,tn其中第i個整數ti示編號為i的同學的資訊傳遞物件是編號為ti的同學,ti≤n且ti≠i
資料保證遊戲一定會結束。
【輸出格式】
1 個整數表示遊戲一共可以進行多少輪
【樣例輸入】
5 2 4 2 3 1
【樣例輸出】
3 【資料範圍】
n≤200000
【分析】
暴力深搜即可。
uses math;
var a,f:array[0..200001]of longint;
i,n,ans,t:longint;
procedure
search
(now:longint);
begin
if f[now]>0
then
begin ans:=min(ans,t-f[now]+1);exit; end;
if f[now]<>-1
then
begin
inc(t);
f[now]:=t;
search(a[now]);
end;
f[now]:=-1;
end;
begin
readln(n);
for i:=1
to n do
read(a[i]);
fillchar(f,sizeof(f),0);
ans:=maxlongint;
for i:=1
to n do
if f[i]=0
then
begin
t:=0;
search(i);
end;
write(ans);
end.
NOIP2015提高組 資訊傳遞
題目描述 有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資...
NOIP2015提高組 資訊傳遞
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 傳送門 因為本題涉及到連通成環的問題,因此可以考慮用並查集來做 注意 此題不能用扁平化,因為我們要統計用了多少次才能到達其祖先,相當於要記錄樹中的dep值,但由於會構成環,所以用普通的並查集來做方便一些 code 1 include2 p...
NOIP2015提高組Day1 資訊傳遞
問題描述 有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti的同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取...