E33 树形DP 树的直径

视频链接:E33 树形DP 树的直径_哔哩哔哩_bilibili

 

复制代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

const int N=100010;
int n,ans;
int d1[N],d2[N];
struct edge{int v,w;};
vector<edge> e[N];

void dfs(int u,int fa){
  d1[u]=d2[u]=0;
  for(auto i:e[u]){
    int v=i.v,w=i.w;
    if(v==fa) continue;
    dfs(v,u);
    int t=d1[v]+w;
    if(t>d1[u]) d2[u]=d1[u],d1[u]=t;
    else if(t>d2[u]) d2[u]=t;
  }
  ans=max(ans,d1[u]+d2[u]);
}
int main(){
  cin>>n;
  for(int i=1,a,b,c;i<n;i++){
    cin>>a>>b>>c;
    e[a].push_back({b,c});
    e[b].push_back({a,c});
  }
  dfs(1,-1);
  cout<<ans;
}
复制代码

 

复制代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

const int N=100010;
int n,ans;
struct edge{int v,w;};
vector<edge> e[N];

int dfs(int u,int fa){
  int d1=0,d2=0,d;
  for(auto i:e[u]){
    int v=i.v,w=i.w;
    if(v==fa) continue;
    d=dfs(v,u)+w;
    if(d>d1) d2=d1,d1=d;
    else if(d>d2) d2=d;
  }
  ans=max(ans,d1+d2);
  return d1;
}
int main(){
  cin>>n;
  for(int i=1,a,b,c;i<n;i++){
    cin>>a>>b>>c;
    e[a].push_back({b,c});
    e[b].push_back({a,c});
  }
  dfs(1,-1);
  cout<<ans;
}
复制代码

 

复制代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

const int N=100010;
int n,a,b,ans;
int d[N];
struct edge{int v,w;};
vector<edge> e[N];

void dfs(int u,int fa){
  for(auto i:e[u]){
    int v=i.v,w=i.w;
    if(v==fa) continue;
    dfs(v,u);
    ans=max(ans,d[u]+d[v]+w);
    d[u]=max(d[u],d[v]+w);
  }
}
int main(){
  cin>>n;
  for(int i=1,a,b,c;i<n;i++){
    cin>>a>>b>>c;
    e[a].push_back({b,c});
    e[b].push_back({a,c});
  }
  dfs(1,-1);
  cout<<ans;
}
复制代码

 

练习:

B4016 树的直径 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

PT07Z - Longest path in a tree - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 

posted @   董晓  阅读(655)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示