zoukankan      html  css  js  c++  java
  • 洛谷P1131 [ZJOI2007]时态同步

    树形DP..

    设dp[i]表示从i到以i为根的子树的最远距离就好

    转移dp[i]=max(dp[i],dp[e]+edge[i].len);

    最后在遍历加一下答案就好。

    记得开long long

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #define maxn 500010
    
    using namespace std;
    
    struct node
    {
        int ed,nxt;
        long long len;
    };
    node edge[maxn<<1];
    int n,m,first[maxn],cnt;
    long long dp[maxn];
    long long ans;
    
    inline void add_edge(int s,int e,long long l)
    {
        ++cnt;
        edge[cnt].ed=e;
        edge[cnt].len=l;
        edge[cnt].nxt=first[s];
        first[s]=cnt;
        return;
    }
    
    inline void dfs(int now,int fa)
    {
        for(register int i=first[now];i;i=edge[i].nxt)
        {
            int e=edge[i].ed;
            if(e!=fa)
            {
                dfs(e,now);
                dp[now]=max(dp[now],dp[e]+edge[i].len);
            }
        }
        for(register int i=first[now];i;i=edge[i].nxt)
        {
            int e=edge[i].ed;
            if(e!=fa) ans=ans+dp[now]-(dp[e]+edge[i].len);
        }
        return;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(register int i=1;i<=n-1;++i)
        {
            int s,e;
            long long l;
            scanf("%d%d%lld",&s,&e,&l);
            add_edge(s,e,l);
            add_edge(e,s,l);
        }
        dfs(m,0);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    JAVA闰年测试与解决非法输入
    Junit介绍与实现
    等价类划分方法的应用
    使用Visual Studio 2013进行UI自动化测试
    简谈软件测试
    【Software Project Management】Quizs
    White box testing
    peer review
    闰年问题
    热烈庆贺清明小长假的到来
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11832944.html
Copyright © 2011-2022 走看看