P2661 信息传递

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int nextval[200010];
 7 int fcnt[200010];
 8 bool vis1[200010], vis2[200010];
 9 int minmum = 0x3f3f3f3f;
10 
11 void dfs(int num, int cnt)
12 {
13     if (vis1[num]) return;
14     if (vis2[num])
15     {
16         minmum = min(minmum, cnt - fcnt[num]);
17         return;
18     }
19     vis2[num] = true;
20     fcnt[num] = cnt;
21     dfs(nextval[num], cnt + 1);
22     vis1[num] = true;
23 }
24 
25 int main()
26 {
27     int n;
28     cin >> n;
29     for (int i = 1; i <= n; i++)
30     {
31         cin >> nextval[i];
32     }
33     for (int i = 1; i <= n; i++)
34     {
35         dfs(i, 0);
36     }
37     cout << minmum;
38 }
View Code

 

posted on 2019-10-09 13:25  thjkhdf12  阅读(108)  评论(0)    收藏  举报