小A与欧拉路

小A与欧拉路

https://ac.nowcoder.com/acm/problem/22618

分析

我们对于不定根的树形结构的题目,我们首先应该考虑定根考虑。考虑从节点 出发。那么我们得到的最短的欧拉路一定是 ,考虑到每次走完一个子树都必须回到自身,除了最后一次。所以我们在定根之后,就是要选取 。那么我们只要取所有节点作为根的最大值。结合定义可以发现我们就是要求,树上的一条最长路径 。其实也就是直径,找个树的直径的做法就过了。

代码

#include<bits/stdc++.h>
using namespace std;
#define pi pair<int,int>
const int N = 2e5 + 100;
vector<pi> G[N];int n,f[N],ans,s;
void dfs(int x,int fa) {
    for(auto e : G[x]) {
        int y = e.first,w = e.second;
        if(y == fa) continue;
        dfs(y,x);
        ans = max(f[x] + f[y] + w,ans);
        f[x] = max(f[x],f[y] + w);
    }
}
int main() {
    scanf("%d",&n);
    for(int a,b,c,i = 1;i < n;i++) {
        scanf("%d%d%d",&a,&b,&c);
        G[a].push_back(pi(b,c));
        G[b].push_back(pi(a,c));
        s += 2 * c;
    }
    dfs(1,0);printf("%d\n",s - ans);
    return 0;
}
全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
6 2 评论
分享
牛客网
牛客企业服务