洛谷 P2661 資訊傳遞

2021-08-19 02:08:52 字數 1436 閱讀 3083

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 個整數,表示遊戲一共可以進行多少輪。

輸入樣例

#1:

複製

5
2 4 2 3 1

輸出樣例

#1:

複製

3
樣例1

解釋遊戲的流程如圖所示。當進行完第

3 輪遊戲後,

4 號玩家會聽到

2 號玩家告訴他自

己的生日,所以答案為

3。當然,第

3 輪遊戲後,

2 號玩家、

3 號玩家都能從自己的訊息

**得知自己的生日,同樣符合遊戲結束的條件。

對於30%

的資料,

n ≤ 200;對於

60%的資料,

n ≤ 2500;對於

100%

的資料,

n ≤ 200000

。圖論問題,最小環。

首先,要剪枝,入度為0,就不需要了。

然後dfs挨個尋找,累積步數。

#includeusing namespace std;

#define n 200001

int a[n],pre[n],vis[n];

int ans=1;

int dfs(int x,int y)

}int main()

while(1) //可以連續刪除動態入度為0的點

if(flag==0) break;

}int minn=999999;

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

}cout

}

洛谷P2661 資訊傳遞

有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資訊,但是每...

洛谷 P2661 資訊傳遞

有 nn n 個同學 編號為 11 1 到 nn n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為 ii i 的同學的資訊傳遞物件是編號為 tit iti 的同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳...

洛谷P2661 資訊傳遞

1這使我意識到提高組有些題難就難在他的演算法標籤是隱晦的,讀完題,感覺除了暴力就沒有其他想法了 看了題解,才知道原來是求有向圖中最小的環,仔細想想還真是的 pragma gcc optimize 2 include using namespace std define pi acos 1.0 def...