ccf 網路延時
阿新 • • 發佈:2018-11-20
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; vector<int> vec[20010];//陣列大小應該是m+n int n,m,vis[20010]; int d[20010],ans=-1,temp; int bfs(int node){ memset(vis,0,sizeof(vis)); memset(d,0,sizeof(d)); queue<int> q; q.push(node); d[node]=0; vis[node]=1; while(!q.empty()){ int tmp=q.front(); q.pop(); // cout<<tmp<<endl; for(int i=0;i<vec[tmp].size();i++){ int v=vec[tmp][i]; // cout<<tmp<<' '<<v<<endl; if(!vis[v]){ vis[v]=1; q.push(v); d[v]=d[tmp]+1; if(ans<d[v]){ ans=d[v]; temp=v; } } } } return 0; } int main(){ int a; scanf("%d%d",&n,&m); for(int i=2;i<=n;i++){ scanf("%d",&a); vec[a].push_back(i); vec[i].push_back(a); } for(int i=1;i<=m;i++){ scanf("%d",&a); vec[a].push_back(i+n); vec[i+n].push_back(a); } bfs(1);//兩次bfs,找樹的直徑 // cout<<temp<<endl; bfs(temp); cout<<ans<<endl; return 0; }