• 图论:求树的直径


    点击查看折叠代码块
    /*
    两次dfs
    第一次定一个根找离他最远的点
    然后以该点为根再找离他最远的点
    参考:https://www.cnblogs.com/handsome-zyc/p/11237529.html
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5;
    const int inf=0x3f3f3f3f;
    int n;
    struct edge{
        int v,w;
        edge (int a=0,int b=0):v(a),w(b){}
    };
    vector<edge>G[maxn];
    int d[maxn];
    int ans=0;
    int top_x;
    
    void dfs(int x,int f){
        if(d[x]>ans){
            ans=d[x];
            top_x=x;
        }
        for (int i=0;i<G[x].size();i++){
            int v=G[x][i].v;
            if(v==f) continue;
            int w=G[x][i].w;
            d[v]=d[x]+1;
            dfs(v,x);
        }
    }
    
    int main(){
        scanf("%d",&n);
        for (int i=1;i<n;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            G[u].push_back(edge(v,1));
            G[v].push_back(edge(u,1));
        }
        dfs(1,0);
        d[top_x]=0;
        ans=0;
        dfs(top_x,0);
        printf("%d
    ",ans);
        return 0;
    }
    
    你将不再是道具,而是成为人如其名的人
  • 相关阅读:
    数据库的安装
    数据库大整合
    数据库的设置及其初始密码
    HTML标签
    增加删除的js
    增删改查js
    表单验证码限制条件
    倒序输出插入的数组
    插入数组排序法1
    求下标长度
  • 原文地址:https://www.cnblogs.com/wsl-lld/p/13393606.html
Copyright © 2020-2023  润新知