洛谷U81904 【模板】树的直径
有负边权,所以用树形DP来找树的直径。
1 //树形DP求树的直径 2 #include<bits/stdc++.h> 3 using namespace std; 4 const int N=500005,M=500005; 5 int n,m,tot,ans; 6 int f1[N],f2[N];//以u为根的子树的最大值和次大值 7 int head[N],to[M*2],w[M*2],nxt[M*2]; 8 9 void add(int x,int y,int z){ 10 nxt[++tot]=head[x]; 11 head[x]=tot; 12 to[tot]=y; 13 w[tot]=z; 14 } 15 16 void dp(int u,int fa){ 17 for(int i=head[u];i;i=nxt[i]){ 18 int v=to[i]; 19 if(v==fa) continue; 20 dp(v,u); 21 if(f1[u]<f1[v]+w[i]){ 22 f2[u]=f1[u]; 23 f1[u]=f1[v]+w[i]; 24 } 25 else if(f2[u]<f1[v]+w[i]) 26 f2[u]=f1[v]+w[i]; 27 ans=max(ans,f1[u]+f2[u]); 28 } 29 } 30 31 int main(){ 32 scanf("%d",&n); 33 int x,y,z; 34 for(int i=1;i<n;i++){ 35 scanf("%d%d%d",&x,&y,&z); 36 add(x,y,z);add(y,x,z); 37 } 38 dp(1,0); 39 printf("%d\n",ans); 40 return 0; 41 }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
标签:
树的直径
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!