Codeforces Round #168 (Div. 1), problem: (B) Zero Tree, DFS
来源:互联网 发布:高青县政务网通知公告 编辑:程序博客网 时间:2024/05/16 11:02
做法:直接DFS即可,题目要求最小的操作数其实可以理解成必须的操作数。
若 节点 x的值为a,a<0,则它的父节点必须做a次上升操作,a>0亦然,然后在看父节点经过这样的改造或的值,重复前面的运算即可
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define LL long longusing namespace std;const int LMT=100004;LL elem[LMT],down[LMT],up[LMT];int next[LMT],all;struct line{ int u,v,next;}e[LMT<<1];void dfs(int u,int pre){ LL uu,d; for(int x=next[u];x!=-1;x=e[x].next) if(e[x].v!=pre) { uu=d=0; dfs(e[x].v,u); if(elem[e[x].v]>0) { uu=up[e[x].v]; d=down[e[x].v]+elem[e[x].v]; } else { uu=up[e[x].v]-elem[e[x].v]; d=down[e[x].v]; } down[u]=max(d,down[u]); up[u]=max(uu,up[u]); } elem[u]+=up[u]-down[u];}void insert(int u,int v){ e[all].u=u; e[all].v=v; e[all].next=next[u]; next[u]=all++;}int main(){ memset(next,-1,sizeof(next)); int n,u,v; scanf("%d",&n); for(int i=1;i<n;i++) { scanf("%d%d",&u,&v); insert(u,v); insert(v,u); } for(int i=1;i<=n;i++)scanf("%I64d",&elem[i]); dfs(1,0); printf("%I64d\n",abs(elem[1])+up[1]+down[1]); return 0;}
- Codeforces Round #168 (Div. 1), problem: (B) Zero Tree, DFS
- Codeforces Round #168 (Div. 1) B. Zero Tree(树上DFS)
- Codeforces Beta Round #77 (Div. 1 Only), problem: (B) Lucky Numbers 数位DP+剪枝DFS+贪心
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1(DFS好题)
- Codeforces Round #268 (Div. 1)B(dfs)
- Codeforces Round #313 (Div. 1) B. Equivalent Strings DFS暴力
- Codeforces Round #359 (Div. 1) B. Kay and Snowflake dfs
- Codeforces Round #306 (Div. 2) B(dfs)
- Codeforces Round #306 (Div. 2) B DFS
- Codeforces Round #138 (Div. 1), problem: (B) Two Strings
- Codeforces Round #253 (Div. 1) B. Andrey and Problem
- Codeforces Round #296 (Div. 1)B---Clique Problem
- Codeforces Round #170 (Div. 2) problem B
- Codeforces Round #173 (Div. 2) Problem B
- Codeforces Round #311 (Div. 2) Problem B
- Codeforces Round #363 (Div. 2), problem: (B)
- Codeforces Round #430(Div.2)Problem C Ilya And The Tree(DFS)
- Codeforces Round #263 (Div.1) B. Appleman and Tree
- Webservice学习
- Codeforces Beta Round #11, problem: (D) A Simple Task 状态压缩DP+记忆化搜素DP
- 修正TiAnlogDisplay显示的问题
- java多态举例
- Android高手应该精通哪些内容
- Codeforces Round #168 (Div. 1), problem: (B) Zero Tree, DFS
- Ibatis 通过logging打印sql语句的xml配置
- 判断两个链表是否相交及获得相交的第一个节点
- java 下载地址
- android.os.NetworkOnMainThreadException
- CSS选择器
- java 内部类 匿名内部类 嵌套类
- debian下安装mysql5.5
- 归并排序