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

    题目链接:Link

    Problem

    Solution

    在确定状态时不妨强制令其必须取当前子树的跟节点,不难发现此时贪心取其子树即可。

    Code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int maxn=16005;
    int n,a[maxn],f[maxn];
    vector<int> G[maxn];
    void dfs(int u,int fa)
    {
    	f[u]=a[u];
    	for(int i=0;i<G[u].size();i++)
    	{
    		int v=G[u][i];
    		if(v==fa) continue;
    		dfs(v,u);
    		if(f[v]>0) f[u]+=f[v];
    	}
    }
    int main()
    {
    	#ifdef local
    	freopen("pro.in","r",stdin);
    	#endif
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    	for(int i=1;i<=n-1;i++)
    	{
    		int u,v; scanf("%d%d",&u,&v);
    		G[v].push_back(u);
    		G[u].push_back(v);
    	}
    	dfs(1,-1);
    	int res=f[1];
    	for(int i=2;i<=n;i++) res=max(res,f[i]);
    	printf("%d
    ",res);
    	return 0;
    }
    
  • 相关阅读:
    SEUOJ上几道水题
    项目计划
    软件工程03
    件工程个人作业02
    软件工程个人作业01
    学习进度条
    软件工程第一次博客
    异常分析
    多态
    Java覆盖
  • 原文地址:https://www.cnblogs.com/happyZYM/p/11716572.html
Copyright © 2011-2022 走看看