CCF201503-4 網路延時(樹的深度 / DFS)
阿新 • • 發佈:2018-12-10
考前刷一道第四題QAQ
題意是給你一棵樹,求樹的深度。我們並不知道哪個節點是樹根,如果每個節點依次進行一次dfs求深度,是會超時的(應該)。所以,我們先對任意一個節點u進行一次dfs,找到離u最遠的節點v,再對v進行一次dfs,得到的最大深度就是答案了。
好了,博主要準備去考CCF了QAQ
#include <bits/stdc++.h> #define ll long long #define INF 0x3f3f3f3f using namespace std; const int maxn = 2e4+10; int n, m; int vis[maxn], maxdis = 0, maxdis_v; vector <int> g[maxn]; void read() { cin >> n >> m; for(int i = 2; i <= n+m; ++i) { int fa; cin >> fa; g[fa].push_back(i); g[i].push_back(fa); } } void dfs(int u, int d) { vis[u] = 1; for(int i = 0; i < g[u].size(); ++i) { int v = g[u][i]; if(d > maxdis) { maxdis = d; maxdis_v = v; } if(!vis[v]) dfs(v, d+1); } } void solve() { dfs(1, 1); maxdis = 0; memset(vis, 0, sizeof(vis)); dfs(maxdis_v, 1); cout << maxdis; } int main() { read(); solve(); return 0; }