zoukankan      html  css  js  c++  java
  • [Luogu P1122]最大子树和 (简单树形DP)

    题面

    传送门:https://www.luogu.org/problemnew/show/P1122


    Solution

    这是一道简单的树形DP题。

    首先,我们可以转换一下题面,可以发现,题目要求我们求出一颗树上的最大联通子图

    因为我们是在树上取的,实际上就是取一颗子树。

    这个就是最基础的树形DP模型了。

    我们可以设f[i]表示我们选的子图以i为根所能取的子树的最大值

    转移是:

    f[i] = beauty[i] + xigema(max(f[j],0))

    (也就是一颗树的孩子所能取的子树,如果它孩子为根的子树>0,就取它,否则不取)

    答案就是最大的f[i]


    Code

    //Luogu P1122 最大子树和
    //Jul,30th,2018
    //树形DP
    #include<iostream>
    #include<cstdio>
    #include<vector>
    using namespace std;
    long long read()
    {
        long long x=0,f=1; char c=getchar();
        while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
        while(isdigit(c)){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    const int N=16000+100;
    const int inf=0x3f3f3f3f;
    vector <int> e[N];
    int n,beauty[N];
    long long f[N];
    bool vis[N];
    long long dfs(int x)
    {
        f[x]=beauty[x];
        vis[x]=true;
        for(int i=0;i<int(e[x].size());i++)
            if(vis[e[x][i]]==false)
                f[x]=max(f[x],f[x]+dfs(e[x][i]));
        return f[x];
    }
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++)
            e[i].reserve(4);
        for(int i=1;i<=n;i++)
            beauty[i]=read();
        for(int i=1;i<n;i++)
        {
            int s=read(),t=read();
            e[s].push_back(t);
            e[t].push_back(s);
        }
        
        dfs(1);
        
        long long ans=-inf;
        for(int i=1;i<=n;i++)
            ans=max(ans,f[i]);
        printf("%lld",ans);
        return 0;
    }
    正解(C++)
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    week8-A-区间选点
    C-TT的美梦
    B-dijkstra-TT的旅行日记
    week7-A-Floyd-TT的魔法猫
    Codeforces 437B The Child and Set (贡献+贪心)
    Codeforces 1236B Alice and the List of Presents(贡献)
    2019 牛客多校 第八场 B Beauty Values (贡献)
    Codeforces 1244G Running in Pairs 序列交换(贪心)
    Codeforces 1244F Chips(环修改,思维题)
    BZOJ 3784 树上的路径(点分治+ST+堆+贪心)待处理
  • 原文地址:https://www.cnblogs.com/GoldenPotato/p/9393376.html
Copyright © 2011-2022 走看看