树的直径dp模板

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=100005;
 6 int n,m,t,ans;
 7 int f1[N],f2[N];
 8 int first[N],v[N],w[N],next[N];
 9 void add(int x,int y,int z)
10 {
11     t++;
12     next[t]=first[x];
13     first[x]=t;
14     v[t]=y;
15     w[t]=z;
16 }
17 void dp(int x,int father)
18 {
19     int i,j;
20     for(i=first[x];i;i=next[i])
21     {
22         j=v[i];
23         if(j==father)
24           continue;
25         dp(j,x);
26         if(f1[x]<f1[j]+w[i])
27         {
28             f2[x]=f1[x];
29             f1[x]=f1[j]+w[i];
30         }
31         else if(f2[x]<f1[j]+w[i])
32           f2[x]=f1[j]+w[i];
33         ans=max(ans,f1[x]+f2[x]);
34     }
35 }
36 int main()
37 {
38     int x,y,z,i;
39     scanf("%d%d",&n,&m);
40     for(i=1;i<=m;++i)
41     {
42         scanf("%d%d%d",&x,&y,&z);
43         add(x,y,z);
44         add(y,x,z);
45     }
46     dp(1,0);
47     printf("%d",ans);
48     return 0;
49 }

 

转载于:https://www.cnblogs.com/jiuduSHENBENG/p/11197654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值