並查集 P2661 資訊傳遞

2021-09-12 00:13:01 字數 988 閱讀 1994

p2661 資訊傳遞

有 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

輸出樣例#1:

3
可以將每個人看成乙個點,將每個人所知道的人的資訊看成一條邊。當邊構成乙個環的時候遊戲結束。所以只需要找到長度最短的圓環.

例:2->4->3->2構成乙個圓環。

#includeusing namespace std;

#define max 200000

int n,a;

int p[max];//集合

int count1=0; //記錄環長度

int min1=max;//記錄最小環長度

int dsu(int x)

}int main()

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

else

} cout

}

P2661 資訊傳遞

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

P2661 資訊傳遞

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

P2661 資訊傳遞

並查集求解有向圖最小環 首先有個特殊要求的就是對於圖的邊是沒有長度的。然後我們採取乙個簡化操作,在找到這個環之間,由於只需要求環的長度,所以對於環的最後一條邊,不加入之前先判斷指向的點能不能最後指向原點。includeusing namespace std int n int ans 200050 ...