51 nod 1424

2023-12-07 03:59
文章标签 51 nod 1424

本文主要是介绍51 nod 1424,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1424 零树

有一棵以1为根的树,他有n个结点,用1n编号。第i号点有一个值vi

现在可以对树进行如下操作:

步骤1:在树中选一个连通块,这个连通块必须包含1这个结点。

步骤2:然后对这个连通块中所有结点的值加1或者减1

问最少要经过几次操作才能把树中所有结点都变成0

注意:步骤1与步骤2合在一起为一次操作。

 

Input

单组测试数据。

第一行有一个整数n(1 ≤ n ≤ 10^5)

接下来n-1行,每行给出 ai  bi (1 ≤ ai, bi ≤ n; ai ≠ bi),表示aibi之间有一条边,输入保证是一棵树。

最后一行有n个以空格分开的整数,表示n个结点的值v1, v2, ..., vn (|vi| ≤ 10^9)

Output

输出一个整数表示最少的操作步数。.

Input示例

3

1 2

1 3

1 -1 1

Output示例

3

System Message (题目提供者)

C++的运行时限为:1000 ms ,空间限制为:131072 KB  

题解:对于树来说,任意一个节点如果与根节点联通,那么其祖先一定和根节点联通。所以对于任意一颗子树,up【i】表示以i为根的子树最少+1的次数,down【i】表示i为根的子树最少-1的次数,每次取儿子节点中最大的即可。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define N 300000
using namespace std;
int n;
int last[N<<1],to[N<<1],head[N],cnt=0;
void ins(int u,int v){last[++cnt]=head[u];head[u]=cnt;to[cnt]=v;
}
long long down[N],up[N],val[N]; 
void dfs(int x,int fa)
{for(int i=head[x];i;i=last[i]){if(to[i]==fa) continue;dfs(to[i],x);down[x]=max(down[x],down[to[i]]);up[x]=max(up[x],up[to[i]]);}val[x]+=(up[x]-down[x]);if(val[x]>0) down[x]+=val[x];if(val[x]<0) up[x]-=val[x];return ;
}
int main()
{int u,v;scanf("%d",&n);for(int i=1;i<n;i++){scanf("%d%d",&u,&v);ins(u,v);ins(v,u);}for(int i=1;i<=n;i++) scanf("%lld",&val[i]);dfs(1,0);printf("%lld",(up[1]+down[1]));return 0;
}




这篇关于51 nod 1424的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464411

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

基于51单片机的智能小车转向控制系统设计与实现

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器(Active Buzzer,自激式蜂鸣器);而有些则不带震荡驱动电路,这种蜂鸣器叫做无源蜂鸣器(Passive Buzzer,它激式蜂鸣器)。 1.原理图 2.软件实现 Int_B

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致 前言 因为产品的更新换代, 把所有温湿度传感器都换成 SHT40 ,替换以前的 SHT21。在 STM32 系列产品上的替换都正常,但是在一块 51 内核的无线产品上面,数据莫名其妙的总会遇到异常的情况,弯弯绕绕了好一阵子,最后才发现是程序在执行一个不算复杂的算法的时候会出错。 那么本文的目的就是说明

基于51单片机的倒计时装置proteus仿真

地址: https://pan.baidu.com/s/1p9xDKXaulyx-PyP6dURp-g 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectronics)公司生产的一系列单片机之一。它基于8051内核,并具有许多与其兼容的特性。 主要特点如下:

SQL必知必会51题

※食用指南:文章内容为牛客网《SQL必知必会》51道题重点笔记,用于重复思考错题,加深印象。 本文章涉及题目也是《SQL必知必会》书中“挑战题”,题目及答案:《SQL必知必会》随书习题答案 练习传送门:SQL必知必会51题 目录: SQL72 检索并列出已订购产品的清单 SQL78 检索产品名称和描述(四) SQL81 顾客登录名 SQL86 返回每个订单号各有多少行数 SQL

51单片机-DS1302(RTC时钟显示,代码内改变,内设的24年9月5日,上午11:12:00)

一、DS1302时序及命令字 两个操作:写操作和读操作 写操作:        (由我们单片机一个控制引脚控制DS1302的IO口写入)首先就是通过时序图把我们的命令字写入,命令字是控制我们对应要写入的年月日,时分秒等配置的关键寄存器,只有设置好命令字相关参数才能写入相关的年月日等时间信息,一个写时序共2个字节,第一个字节是我们的命令字,第二个字节是我们要写入的数据(此数据为16进制写入,最