[蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
以前有個孩子,他分分鐘都在碎碎念。不過,他的念頭之間是有因果關系的。他會在本子里記錄每一個念頭,并用箭頭畫出這個念頭的來源于之前的哪一個念頭。翻開這個本子,你一定會被互相穿梭的箭頭給攪暈,現在他希望你用程序計算出這些念頭中最長的一條因果鏈。
將念頭從1到n編號,念頭i來源于念頭from[i],保證from[i]< i,from[i]=0表示該念頭沒有來源念頭,只是腦袋一抽,靈光一現。
樣例說明
最長的因果鏈有:
1-> 2-> 5 (from[5]=2,from[2]=1,from[1]=0)
1-> 2-> 7 (from[7]=2,from[2]=1,from[1]=0)
3-> 4-> 6 (from[6]=4,from[4]=3,from[3]=0)
3-> 4-> 8 (from[8]=4,from[4]=3,from[3]=0)
輸入
第一行一個正整數n表示念頭的數量
接下來n行依次給出from[1],from[2],…,from[n]
數據規模和約定
1< =n< =1000
輸出
共一行,一個正整數L表示最長的念頭因果鏈中的念頭數量
樣例輸入
8
0
1
0
3
2
4
2
4
樣例輸出
3
解題思路:
水題!!!
代碼如下:
#include <iostream> using namespace std; const int N = 1010; int from[N]; int cnt;void dfs(int i) {cnt = 1;for (int j = from[i]; j; j = from[j]) {cnt++;} }int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> from[i];int ans = -1;for (int i = 1; i <= n; i++) {dfs(i);if (cnt > ans)ans = cnt;}cout << ans << endl;return 0; }總結
以上是生活随笔為你收集整理的[蓝桥杯][算法提高VIP]分分钟的碎碎念-dfs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++未定义行为-数组越界
- 下一篇: 猪肉皮的功效与作用、禁忌和食用方法