P1122 最大子树和
传送门
思路:
任意找一个点为树根。DFS 遍历树,如果子树和为负就直接跳过,不然就统计进答案。( 虽是任意取一点为根,但不一定从这个点出发能够取得最优解,要开一个 ans 记录一下最大值。)
标程:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- #include<string>
- #include<cstdlib>
- #include<stack>
- #include<vector>
- #include<queue>
- #include<deque>
- #include<map>
- #include<set>
- using namespace std;
- #define lck_max(a,b) ((a)>(b)?(a):(b))
- #define lck_min(a,b) ((a)<(b)?(a):(b))
- #define maxn 16002
- typedef long long LL;
- LL sum[maxn],n;
- LL head[maxn<<],cnt=;
- vector<LL>son[maxn];
- LL w[maxn],ans=-maxn;
- struct hh
- {
- LL nex,to;
- }t[maxn<<];
- inline LL read()
- {
- LL kr=,xs=;
- char ls;
- ls=getchar();
- while(!isdigit(ls))
- {
- if(!(ls^))
- kr=-;
- ls=getchar();
- }
- while(isdigit(ls))
- {
- xs=(xs<<)+(xs<<)+(ls^);
- ls=getchar();
- }
- return xs*kr;
- }
- LL u,v;
- inline void add(LL nex,LL to)
- {
- t[++cnt].nex=head[nex];
- t[cnt].to=to;
- head[nex]=cnt;
- }
- inline void dfs(LL u,LL fa)
- {
- for(LL i=head[u];i;i=t[i].nex)
- {
- LL v=t[i].to;
- if(v==fa) continue;
- son[u].push_back(v);
- dfs(v,u);
- }
- if(son[u].size())
- {
- for(LL j=;j<son[u].size();j++)
- {
- if(w[son[u][j]]<) continue;
- w[u]+=w[son[u][j]];
- }
- }
- w[u]+=sum[u];
- ans=lck_max(ans,w[u]);
- return ;
- }
- int main()
- {
- //freopen("t.in","r",stdin);
- n=read();
- for(LL i=;i<=n;i++)
- sum[i]=read();
- for(LL i=;i<n;i++)
- {
- u=read();v=read();add(u,v);add(v,u);
- }
- dfs(,);
- printf("%lld\n",ans);
- return ;
- }
P1122 最大子树和的更多相关文章
- P1122 最大子树和(树形dp)
P1122 最大子树和 大水题 随便找一个点做根,蓝后累计子树和. 子树和<0的话不取就行了 顺便找个最大值输出 end. #include<iostream> #include&l ...
- 洛谷P1122 最大子树和
P1122 最大子树和 题目提供者该用户不存在 标签动态规划树形结构 难度普及/提高- 通过/提交54/100 提交该题 讨论 题解 记录 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在 ...
- 洛谷 P1122 最大子树和
P1122 最大子树和 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的 ...
- 洛谷——P1122 最大子树和
P1122 最大子树和 树形DP,$f[u]$表示以u为根的子树的最大美丽指数 $f[u]+=max(0,f[v])$ 树形DP的基本结构,先搜再DP,这题感觉有点儿贪心的性质,选就要选美丽值> ...
- [Luogu P1122]最大子树和 (简单树形DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1122 Solution 这是一道简单的树形DP题. 首先,我们可以转换一下题面,可以发现,题目要求我们求 ...
- 【Luogu】P1122最大子树和(DFS,树上DP)
题目链接 感觉自己DP好烂啊 道道看题解 钦定1为根,DFS搜索子树权值.如果子树权值大于0就将当前节点加上子树权值,反之就把子树扔掉.最后在所有节点的权值中寻找最优解. void dfs(int ...
- P1122 最大子树和 (树形DP)
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
- 洛谷—— P1122 最大子树和
https://www.luogu.org/problem/show?pid=1122 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课 ...
- 洛谷P1122 最大子树和 (树状dp)
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
随机推荐
- mui 卡片视图 遮罩蒙版
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- online ddl与pt-osc详解
Ⅰ.背景 优化sql的过程中发现表上少一个索引,直接加一个?会不会hang住?不加?sql又跑不好,由此引出一个问题--ddl操作怎么做? Ⅱ.闲扯三两句 5.6版本之前的MySQL创建索引不支持on ...
- 分析Hello2代码
代码如下String username = request.getParameter("username"); if (username != null && us ...
- 如何使用Windows防火墙禁止软件联网
很多软件需要联网,当我们为了“某些目的”,不想让软件联网的时候,我们有没有办法做到呢?答案是肯定的,那就是使用Windows系统自带的防火墙来屏蔽软件的联网,禁止软件出站请求,这样就可以了,下面介绍具 ...
- CSS弹性盒布局(display:flex)
CSS弹性布局(display:flex) 参考: http://www.runoob.com/w3cnote/flex-grammar.html https://www.jianshu.com/p/ ...
- SQLAlchemy(包含有Flask-Migrate知识点)
what's the SQLAlchemy SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQ ...
- python基础(5)-文件操作
文件(file)操作 创建文件 verse.txt: 床前明月光 疑是地上霜 open(path(文件路径),mode(模式:r/r+[读],w/w+[写],a/a+[追加])):返回文件句柄(对象) ...
- [py]js前端求和与flask后端求和
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 去掉Tomcat的管理页面
一.去掉Tomcat的管理页面 一.方法一:如果要去掉默认该界面,可以重命名tomcat目录下的ROOT,并新建空文件夹命名为ROOT 1.刚打开tomcat,默认访问的是tomcat管理页面,比如X ...
- 理解Deadlock
问:为啥以下代码会产生死锁 public class Deadlock { static class Friend { private final String name; public Friend ...