Live2d Test Env

斜率优化:

 

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=600010;
const int Mod=1e9+7;
int c[maxn],fa[maxn];
int Laxt[maxn],Next[maxn],To[maxn],len[maxn],cnt;
ll dp1[maxn],dp2[maxn],ans=0;
ll Pow(int x){ return 1LL*x*x;}
void add(int u,int v,int w)
{
    Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v; len[cnt]=w;
}
void dfs1(int u,int f) //dp1[u]是fa[u]到子树的最大值
{
    for(int i=Laxt[u];i;i=Next[i]){
        int v=To[i]; if(v==f) continue;
        c[v]=len[i]; dfs1(v,u);
        dp1[u]=max(dp1[u],dp1[v]+Pow(c[u]-c[v]));
    }
    if(f) ans=max(ans,dp1[u]);
}
int main()
{
    int N,u,v,w;
    while(~scanf("%d",&N)){
        rep(i,1,N) Laxt[i]=0; cnt=0;
        rep(i,1,N-1){
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w); add(v,u,w);
        }
        rep(i,1,N) dp1[i]=dp1[i]=0; ans=0;
        dfs1(1,0);
        dfs2(1,0);
        printf("%lld\n",ans);
    }
    return 0;
}

 

posted @ 2019-09-03 22:52  nimphy  阅读(226)  评论(0编辑  收藏  举报