竞码【405】树的直径(树型dp)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;
int n, ans, dp[maxn];
vector<int>edge[maxn];

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

inline void print(int x){
    if(x < 0) x = ~x + 1, putchar('-');
    if(x > 9) print(x / 10);
    putchar(x % 10 + '0');
}

void dfs(int u, int f){
    dp[u] = 0;
    for(auto v : edge[u]){
        if(v == f) continue;
        dfs(v, u);
        ans = max(ans, dp[u] + dp[v] + 1);
        dp[u] = max(dp[u], dp[v] + 1);
    }
}

int main(){
    n = read();
    for(int i = 1; i < n; i++){
        int u = read(), v = read();
        edge[u].push_back(v);
        edge[v].push_back(u);
    }
    dfs(1, 0);
    print(ans);

    return 0;
}

全部评论

相关推荐

01-14 19:01
吉首大学 Java
黑皮白袜臭脚体育生:加个项目吧,一般需要两个项目一业务一轮子呢,简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务