zoukankan      html  css  js  c++  java
  • BZOJ 1060: [ZJOI2007]时态同步

    Description

    一个有根树,你只能进行增加操作,问你将所有叶节点到根的路径权值相同至少需要增加几次.

    Sol

    我也不知道该叫什么算法...

    反正就是记录一下到子节点到当前节点的最大距离统计答案就可以了.

    Code

    /**************************************************************
        Problem: 1060
        User: BeiYu
        Language: C++
        Result: Accepted
        Time:960 ms
        Memory:19660 kb
    ****************************************************************/
     
    #include <cstdio>
    #include <utility>
    #include <vector>
    #include <iostream>
    using namespace std;
     
    #define mpr make_pair
    #define _x first
    #define _y second
    typedef pair< int,int > pr;
    const int N = 500005;
     
    int n,rt;
    int f[N];
    vector< pr > g[N];
    long long ans;
     
    inline int in(int x=0,char ch=getchar()){ while(ch>'9' || ch<'0') ch=getchar();
        while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x; }
    void DP(int u,int fa){
        f[u]=0;
        for(int i=0,lim=g[u].size(),v;i<lim;i++) if((v=g[u][i]._x)!=fa)
            DP(v,u),f[u]=max(f[u],f[v]+g[u][i]._y);
        for(int i=0,lim=g[u].size(),v;i<lim;i++) if((v=g[u][i]._x)!=fa) ans+=f[u]-(f[v]+g[u][i]._y);
    }
    int main(){
        n=in(),rt=in();
        for(int i=1,u,v,w;i<n;i++){
            u=in(),v=in(),w=in();
            g[u].push_back(mpr(v,w));
            g[v].push_back(mpr(u,w));
        }
        DP(rt,0);
        cout<<ans<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    js(一)
    css (一)
    html
    Spring MVC(四)
    Spring MVC(三)
    Spring MVC(二)
    Spring MVC(一)
    Druid应用
    C3P0使用
    jdbc(二)
  • 原文地址:https://www.cnblogs.com/beiyuoi/p/6113673.html
Copyright © 2011-2022 走看看