zoukankan      html  css  js  c++  java
  • 洛谷P1122最大子树和题解

    题目

    一道比较好想的树形(DP)

    完全可以用树形DP的基本思路,递归,然后取最优的方法。

    (Code)

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int n, a, b, cnt, maxn, data[100100], dp[100100], lin[100010];
    struct cym {
    	int to, nex;
    }e[100100];
    inline void add(int f, int t)
    {
    	e[++cnt].to = t;
    	e[cnt].nex = lin[f];
    	lin[f] = cnt;
    }
    inline void dfs(int now, int fa)
    {	
    	dp[now] = data[now];
    	for (int i = lin[now]; i; i = e[i].nex)
    	{
    		int to = e[i].to;
    		if (to == fa) continue;
    		dfs(to, now);
    		dp[now] += max(0, dp[to]);
    	}
    	maxn = max(maxn, dp[now]);
    }
    int main()
    {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++)
    		scanf("%d", &data[i]), dp[i] = data[i];
    	for (int i = 1; i < n; i++) 
    	{
    		scanf("%d%d", &a, &b);
    		add(a, b), add(b, a);
    	}
    	dfs(1, 0);
    /*	for (int i = 1; i <= n; i++)
      		if (!dp[i])
      			dfs(i, 0);
    */
    	printf("%d", maxn);	
    }
    
  • 相关阅读:
    POJ
    FZU
    HDU
    HDU
    HDU
    HDU
    Educational Codeforces Round 84 E. Count The Blocks
    B Boundary(由弦求圆)
    D. Maximum Sum on Even Positions(翻转1次,求最大偶数位和)
    E. DeadLee(思维,拓扑图处理)
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/10539098.html
Copyright © 2011-2022 走看看