NOIP2015 Day1 資訊傳遞

2021-08-21 17:45:44 字數 1096 閱讀 2780

題目描述

有 n 個同學(編號為 1 到 n )正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為 i 的同學的資訊傳遞物件是編號為 t_i 的同學。

遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件(注意:可能有人可以從若干人那裡獲取資訊, 但是每人只會把資訊告訴乙個人,即自己的資訊傳遞物件)。當有人從別人口中得知自 己的生日時,遊戲結束。請問該遊戲一共可以進行幾輪?

輸入輸出格式

輸入格式:

共 2 行。

第 1行包含1個正整數 n ,表示 n 個人。

第 2 行包含 n 個用空格隔開的正整數 t_1,t_2,……t_n,其中第 i 個整數 t_i

表示編號為 ii 的同學的資訊傳遞物件是編號為 t_i的同學, t_i≤n 且 t_i≠i 。

輸出格式:

1 個整數,表示遊戲一共可以進行多少輪。

【分析】

顯而易見的是如果乙個人可以從其他人的口中得知自己的訊息,則這乙個完整的資訊鏈也一定乙個環,且由於每個點的入度為一,所以整個環一定為乙個單向環。那麼,環上每個人得知得到自己資訊輪數是一樣的均為環的長度。除去環本身,只可能有很多條單向的鏈指向環中的乙個節點。

所以鏈本身可以忽略,只需要計算環的長度或環中任意一點到自身的距離,再比較最小值

下面看**:

#include

#include

#include

#include

using

namespace

std;

const

int maxn=200100;

int n,t[maxn],ans=0x7fffffff;

int step[maxn];

bool used[maxn];

int main()

step[x]=j;

x=t[x],j++;

}x=i;

while(1)}}

printf("%d\n",ans);

return

0;}

並查集 NOIP 2015 Day1 資訊傳遞

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

noip2015day1t2 資訊傳遞

把每個同學看成乙個點,傳遞關係看成一條邊,點數等於邊數,因此圖由若干個環或環鏈復合邊數等於點數的東西組成,不存在孤立鏈。在圖上,傳遞一輪後,每個點掌握沿邊前乙個點的資訊,傳遞x輪後,任意乙個點恰好掌握沿邊反向前進x條邊的路徑上的所有點的資訊,要聽到自己的資訊,也就是在環上走一圈。這樣就把題目抽象為找...

資訊傳遞 NOIP2015 day1 T2

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