有 n個同學(編號為1到n)正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti的同學。
遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件(注意:可能有人可以從若干人那裡獲取資訊, 但是每人只會把資訊告訴乙個人,即自己的資訊傳遞物件)。當有人從別人口中得知自 己的生日時,遊戲結束。請問該遊戲一共可以進行幾輪?
輸入共2行。 第1行包含1個正整數 n,表示n個人。第2行包含n個用空格隔開的正整數 t1,t2,⋯⋯,tn,其中第i個整數ti表示編號為i的同學的資訊傳遞物件是編號為ti的同學,ti≤n且ti≠i。
資料保證遊戲一定會結束。
輸出共1行,包含1個整數,表示遊戲一共可以進行多少輪。
5 2 4 2 3 1
對於100% n <= 200000
很顯然,就是要找乙個最小環,用tarjan隨便找一找就可以了。
不過話說標頭檔案
.h>
好強啊,據說包含了幾乎所有的庫,不過聽說noip不能用,只有noi可以,另外我突然意識到乙個嚴肅的問題,假如在c++前面宣告std這個命名空間的話,有可能會出現全域性變數名衝突的問題。。。
#include
const
int n=2e5+7;
std::vector
e[n];
std::stack
s;int dfn[n],low[n];
int tot,n,ans=n;
bool vis[n];
int read()
while (ch>='0' && ch<='9')
return x*k;
}void tarjan(int x)
else
if(vis[v])
}if(low[x]==dfn[x])
if(cnt>1)
ans=std::min(cnt,ans);
}}int main()
for(int i=1;i<=n;i++)
std::cout
}
NOIP 2015 UOJ 150 運輸計畫
公元 2044 年,人類進入了宇宙紀元。l 國有 n 個星球,還有 n 1 條雙向航道,每條航道建立在兩個星球之間,這 n 1條航道連通了 l 國的所有星球。小 p掌管一家物流公司,該公司有很多個運輸計畫,每個運輸計畫形如 有一艘物流飛船需要從 ui號星球沿最快的宇航路徑飛行到 vi號星球去。顯然,...
uoj150 NOIP2015 運輸計畫
題目鏈結 給出一棵樹以及m個詢問,可以將樹上一條邊的權值修改為0,求經過這樣的修改之後最長的邊最短是多少。老早就聽說過這道題了,好像使用樹鏈剖分。先樹鏈剖分求出每個詢問的路程,最長的最短,可以用二分做。二分最長的邊的大小,也就是最後的答案,問題來了,怎麼判斷這個答案是否可行呢?我們記錄下所有超出當前...
NOIP 2015 資訊傳遞
題目描述 有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資...