zoukankan      html  css  js  c++  java
  • 树的直径

    定义:

    对于一棵树,找到树上的两个节点并且他们的路径最长,该最长路径即为该树的直径

    求法:

    1、使用bfs或dfs:先取树中的一个点进行dfs/bfs,找到离该点最远的点p,点p一定是树直径的一个端点

    以该点在进行一次dfs/bfs,找到一个离p点最远的点q,则pq为该树的直径,且pq的距离为直径大小

    2、树形dp(待补全)

    代码:

    dfs

    void dfs(int u,int fa,int dist)    //u为当前结点,fa为u的父亲节点, dist为遍历到该点的距离 
    {
        if(ans<dist)
        {
            ans=dist;
            pos=u;
        }
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            int to=edge[i].to;
            if(to==fa)continue;
            dfs(to,u,dist+edge[i].val);
        }
    }

    bfs

    void bfs(int u)
    {
        memset(vis1,false,sizeof(vis1));
        memset(dis,0,sizeof(dis));ans=0;
        queue<int>que;
        while(!que.empty())que.pop();
        
        que.push(u);
        vis[u]=true;
        while(!que.empty())
        {
            int top=que.front();
            que.pop();
            for(int i=head[top];i!=-1;i=edge[i].next)
            {
                int to=edge[i].to;
                if(!vis[to])
                {
                    vis[to]=true;
                    dis[to]=dis[top]+edge[i].val;
                    que.push(to);
                    if(ans<dis[to])
                    {
                        ans=dis[to];
                        pos=to;
                    }            
                }
            }
        }
    }
  • 相关阅读:
    linux 中的vim的配置文件的位置
    centos find
    multi-cursor
    ctrlsf插件
    Vim的可视模式
    Vim的tagbar插件
    Vim的tag系统
    ~/.ctag的作用与配置
    在Vim里使用gtags-cscope
    查看Vim的option变量的值
  • 原文地址:https://www.cnblogs.com/LjwCarrot/p/11312022.html
Copyright © 2011-2022 走看看