UOJ 146 NOIP2015 資訊傳遞

2021-07-25 03:39:34 字數 1095 閱讀 8774

有 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同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資...