[CCF CSP]201503-4 网络延时
树的直径 模板题
#include<bits/stdc++.h> using namespace std; int n,m; const int maxn=20005; vector<int> g[maxn]; int vis[maxn]; int ans,p; void dfs(int cur,int step) { //cout<<cur<<' '<<step<<endl; for(int i=0;i<g[cur].size();i++) { int nex=g[cur][i]; if(vis[nex]) continue; vis[nex]=1; dfs(nex,step+1); vis[nex]=0; } if(step>ans) { ans=step; p=cur; } } int main() { //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); scanf("%d%d",&n,&m); for(int i=2,k;i<=n;i++){ scanf("%d",&k); g[i].push_back(k); g[k].push_back(i); } for(int i=1,k;i<=m;i++){ scanf("%d",&k); g[n+i].push_back(k); g[k].push_back(n+i); } memset(vis,0,sizeof(vis)); ans=0; vis[1]=1; dfs(1,0); // printf("%d\n",p); memset(vis,0,sizeof(vis)); ans=0; vis[p]=1; dfs(p,0); printf("%d\n",ans); return 0; } /* 4 2 1 1 3 2 1 */