zoukankan      html  css  js  c++  java
  • MZOJ 1264 Longest

    MZOJ 1264 Longest

    #include<bits/stdc++.h>
    #define maxn 5000
    using namespace std;
     
    int k=0,head[maxn];
    int f[maxn][2];
    int ans=0;
     
    struct node{
        int v,w,nxt;
    }e[maxn<<1];
     
    void adde(int x,int y,int z){
        e[k].v=y;
        e[k].w=z;
        e[k].nxt=head[x];
        head[x]=k++;
    } 
     
    void init(){
        freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
    }
     
    void readdata(){
        memset(head,-1,sizeof(head));
        int n,u,v,w;
        scanf("%d",&n);
        for(int i=1;i<n;i++){
            scanf("%d%d%d",&u,&v,&w);
            adde(u,v,w);
            adde(v,u,w);
        }
    }
     
    void dp(int u,int fa){
        f[u][0]=0;
        f[u][1]=0;
        for(int i=head[u];~i;i=e[i].nxt){
            int v=e[i].v,w=e[i].w;
            if (v==fa) continue;
            dp(v,u);
            int dis=f[v][0]+w;
            if(dis>f[u][0]){
                f[u][1]=f[u][0];
                f[u][0]=dis;
            }
            else if(dis>f[u][1]){
                f[u][1]=dis;
            }
            ans=max(ans,f[u][1]+f[u][0]);
        }
    }
     
    int main(){
        //init();
        readdata();
        dp(1,0);
        printf("%d",ans);
        return 0;
    }

    树形DP的方法

  • 相关阅读:
    个人项目作业
    自我介绍+软工五问
    Word Count
    个人简介+软工五问
    小学生算术题生成器
    个人项目-WC
    个人简历+软工五问
    学习有感
    学习爱我
    软件工程学习记录
  • 原文地址:https://www.cnblogs.com/quietus/p/10300077.html
Copyright © 2011-2022 走看看