旅游规划

Posted llllllpppppp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旅游规划相关的知识,希望对你有一定的参考价值。

题意:给一棵树,输出树上所有最长路径包含的节点

 

树的直径的应用

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 200005
#define N2 400005
using namespace std;

inline int read()
{
    int f=1,x=0;
    char ch=getchar();
    while(ch<0 || ch>9) {if(ch==-) f=-1; ch=getchar();}
    while(ch>=0 && ch<=9) {x=x*10+ch-0; ch=getchar();}
    return x*f;
}

int n,cnt,ans=-1;
int v[N2],head[N],nxt[N2];
int d1[N],d2[N],c[N],w[N];

void add(int x,int y)
{
    v[++cnt]=y;
    nxt[cnt]=head[x];
    head[x]=cnt;
}

int dfs(int x,int fa)
{
    for(int i=head[x];i!=-1;i=nxt[i])
    {
        int t=v[i];
        if(t==fa) continue;
        int s=dfs(t,x)+1;
        if(s>d1[x])
        {
            d2[x]=d1[x];
            d1[x]=s;
            c[x]=t;
        }
        else if(s>d2[x])
            d2[x]=s;
    }
    ans=max(ans,d1[x]+d2[x]);
    return d1[x];
}

void dfs2(int x,int fa)
{
    if(x)
    {
        if(c[fa]!=x)
            w[x]=max(w[fa],d1[fa])+1;
        else
            w[x]=max(w[fa],d2[fa])+1;
    }
    for(int i=head[x];i!=-1;i=nxt[i])
        if(v[i]!=fa)
            dfs2(v[i],x);
}

int main()
{
    memset(head,-1,sizeof(head));//节点编号从0开始
    int i;
    int x,y;
    n=read();
    for(i=1;i<n;++i)
    {
        x=read(); y=read();
        add(x,y);
        add(y,x);
    }
    dfs(0,-1);
    dfs2(0,-1);
    for(i=0;i<n;i++)
        if(w[i]+d1[i]==ans || d1[i]+d2[i]==ans)
            printf("%d
",i);
    return 0;
}

 

以上是关于旅游规划的主要内容,如果未能解决你的问题,请参考以下文章

[AutoCars]自动驾驶汽车概述(下)

微信小程序代码片段

Scrapy Spider没有返回所有元素

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?