[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
*/

猜你喜欢

转载自www.cnblogs.com/Andrew-aq/p/12431194.html
今日推荐