CF1324F题解

题目大意

给出一颗 n n n个节点的无根树,每个节点有一个颜色 a u a_u au,如果 a u = 0 a_u=0 au=0则为黑色,否则为白色。

对于每个节点 u u u,选出一个包含 u u u的联通子图,设子图中白点个数为 c n t 1 cnt_1 cnt1,黑点个数为 c n t 2 cnt_2 cnt2,输出 c n t 1 − c n t 2 cnt1-cnt_2 cnt1cnt2的最大值。

1 ≤ n ≤ 2 ∗ 1 0 5 , 0 ≤ a u ≤ 1 1 \leq n \leq 2*10^5,0 \leq a_u \leq 1 1n2105,0au1

题目思路

先以 1 1 1为根,预处理出每个点的子树中 c n t 1 − c n t 2 cnt_1-cnt_2 cnt1cnt2的最大值。

然后进行换根 d p dp dp

当你把根从 u u u转移到 v v v时, f 2 v = max ⁡ ( f 2 u + f 1 u − m a x ( f 1 v , 0 ) , 0 ) f2_v= \max(f2_u+f1_u-max(f1_v,0),0) f2v=max(f2u+f1umax(f1v,0),0)

f 1 f1 f1就是上面预处理的数组, f 2 f_2 f2就是每个点子树外 c n t 1 − c n t 2 cnt_1-cnt_2 cnt1cnt2的最大值。

因为只有根是必选的,所以其他值需要跟 0 0 0 m a x max max

具体实现参考代码。

#include<bits/stdc++.h>
using namespace std;
const int N=200000+10;
int n,a[N],f1[N],f2[N];
int head[N<<1],nxt[N<<1],to[N<<1],tot=0;
void add(int u,int v)
{to[++tot]=v;nxt[tot]=head[u];head[u]=tot;
}
int read()
{int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}   while(ch>='0'&&ch<='9')s=s*10+(ch-'0'),ch=getchar();return s*w;
}
void dfs1(int u,int fa)
{if(a[u])f1[u]=1;else    f1[u]=-1;for(int i=head[u];i;i=nxt[i]){int v=to[i];if(v==fa)continue;dfs1(v,u);f1[u]+=max(f1[v],0);}
}
void dfs2(int u,int fa)
{for(int i=head[u];i;i=nxt[i]){int v=to[i];if(v==fa)continue;f2[v]=max(f2[u]+f1[u]-max(f1[v],0),0);dfs2(v,u);}
}
int main()
{n=read();for(int i=1;i<=n;++i)a[i]=read();for(int i=1;i<=n-1;++i){int u=read(),v=read();add(u,v);add(v,u);}   dfs1(1,1);dfs2(1,1);for(int i=1;i<=n;++i)printf("%d ",f1[i]+f2[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 macOS 中删除 Time Machine 本地快照

看到这个可用82GB&#xff08;458.3MB可清除&#xff09; 顿时感觉清爽&#xff0c;之前的还是可用82GB&#xff08;65GB可清除&#xff09;&#xff0c;安装个xcode都安装不上&#xff0c;费解半天&#xff0c;怎么都解决不了这个问题&#xff0c;就是买磁盘情理软件也解决不了…

Spring Boot 整合xxl-job实现分布式定时任务

xxl-job介绍 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。 设计思想 将调度行为抽象形成“调度…

阿里云 业务集群的冗余、备份、监控方案

1. 请解释什么是业务集群的冗余、备份和监控&#xff1f; 一、冗余方案 硬件冗余&#xff1a;在业务集群中&#xff0c;关键设备如服务器、存储设备等应采用双机热备或集群技术&#xff0c;确保在某台设备出现故障时&#xff0c;其他设备能够自动接管工作&#xff0c;保证业务…

一、认识微服务

目录 一、单体架构 二、分布式架构 三、微服务 1、微服务架构特征&#xff1a; 1.单一职责&#xff1a; 2.面向服务&#xff1a; 3.自治&#xff1a; 4.隔离性强&#xff1a; 2、微服务结构&#xff1a; 3、微服务技术对比&#xff1a; 一、单体架构 二、分布式架构 三…

thinkphp5 application/json请求取json数据

当http的content-typeapplication/json时 我们在thinkphp5中如何取json数据&#xff1f; 1&#xff0c;参数信息获取 $user $this->request->param(user); 2&#xff0c;json数据获取并转为字符串 $json json_encode($this->request->post()); 3&#xff…

MyBatis Plus整合Redis实现分布式二级缓存

MyBatis缓存描述 MyBatis提供了两种级别的缓存&#xff0c; 分别时一级缓存和二级缓存。一级缓存是SqlSession级别的缓存&#xff0c;只在SqlSession对象内部存储缓存数据&#xff0c;如果SqlSession对象不一样就无法命中缓存&#xff0c;二级缓存是mapper级别的缓存&#xff…

TYUST-RM2023-NewMaker哨兵视觉代码

目录 1 TYUST-RM2023-NewMaker哨兵视觉代码 1.1 说明 1.2 算法设计 1.3 识别思路 TYUST-RM2023-NewMaker哨兵视觉代码 说明 本套代码是太原科技大学NewMaker战队2023赛季哨兵开源代码 本套代码主要含有&#xff1a;TYUST-RM2023赛季哨兵视觉代码&#xff0c;主要模块…

等保到底在“保”什么?

在信息时代&#xff0c;等保评级成为衡量企业信息安全水平的重要标准。那么&#xff0c;什么是等保评级呢&#xff1f;等保合规到底保的是什么呢&#xff1f;一起来看看吧。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 等保评级&#xff0c;会从七个维度进…

DevEco Studio开发工具下载、安装(HarmonyOS开发)_For Mac

一、说明 初学HarmonyOS开发&#xff0c;DevEco Studio开发工具的安装和使用是必须的。 &#xff08;注&#xff1a;不多废话&#xff0c;跟着下面流程操作下载、安装DevEco Studio即可。&#xff09; 二、下载DevEco Studio 1.官网下载地址&#xff1a; https://developer.…

ffmpeg EasyAVFilter去B帧

要设置无B帧的 ffmpeg 命令行&#xff0c;可以使用以下命令&#xff1a; ffmpeg -i input.mp4 -bf 0 output.mp4 其中&#xff0c;-bf 参数表示 B 帧数。将其设置为 0 即可禁用 B 帧。 那么EasyAVFilter里面去B帧就是调用&#xff1a;EasyAVFilter_AddFilter(handle, “-bf 0”…

springboot苍穹外卖实战:十、缓存菜品(手动用redisTemplate实现缓存逻辑)+缓存套餐(Spring cache实现)

缓存菜品 缺点 缓存和数据库的数据一致性通常解决方案&#xff1a;延时双删、异步更新缓存、分布式锁。 该项目对于缓存菜品的处理较为简单&#xff0c;实际可以用管道技术提高redis的操作效率、同时cache自身有注解提供使用。 功能设计与缓存设计 建议这部分去看下原视频&…

华为:每个企业都能“一触即达”数智世界

在大模型浪潮的影响下&#xff0c;几乎各行各业都在探讨数智化转型的课题&#xff0c;一些隐藏在水面下的问题正逐渐浮出水面&#xff1a; 一方面&#xff0c;数智化转型的呼声很高&#xff0c;但很多企业不知道该从何处着手&#xff0c;怎么通过数智化的能力降本增效&#xf…

​软考-高级-系统架构设计师教程(清华第2版)【第8章 系统质量属性与架构评估(P286~319)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第8章 系统质量属性与架构评估&#xff08;P286~319&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

Unity中Shader矩阵的逆矩阵

文章目录 前言一、逆矩阵的表示二、逆矩阵的作用四、逆矩阵的计算五、顺序的重要性六、矩阵的逆总结1、求矩阵的逆前&#xff0c;这个矩阵必须得是个方阵2、只有 A x A ^-1^ A^-1^ x A 1时&#xff0c;A的逆才是A^-1^3、求2x2矩阵的逆&#xff1a;交换 a 和 b 的位置&#xf…

国际腾讯云:云服务器疑似被病毒入侵问题解决方案!!!

云服务器可能由于弱密码、开源组件漏洞的问题被黑客入侵&#xff0c;本文介绍如何判断云服务器是否被病毒入侵&#xff0c;及其解决方法。 问题定位 使用 SSH 方式 或 使用 VNC 方式 登录实例后&#xff0c;通过以下方式进行判断云服务器是否被病毒入侵&#xff1a; rc.loca…

夯实c语言基础

二维数组 在C语言中&#xff0c;定义二维数组时需要指定行和列的大小。在引用中&#xff0c;int a[][3]{1,2,3,4,5,6,7,8}定义了一个二维数组a&#xff0c;其中有两行三列&#xff0c;即a[0]1, a2, a3, a4, a5, a6。而int a[]则是错误的定义方式&#xff0c;因为在定义时必须指…

使用flutter的Scaffold脚手架开发一个最简单的带tabbar的app模板

flutter自带的scaffold脚手架可以说还是挺好用的&#xff0c;集成了appBar&#xff0c;还有左侧抽屉&#xff0c;还有底部tabbar&#xff0c;可以说拿来就可以用了啊&#xff0c;所以我今天也体验了一下&#xff0c;做了一个最简单的demo&#xff0c;就当是学习记录了。 效果展…

JS-项目实战-代码优化-事件动态绑定

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…

场景图形管理 - (2)

裁剪平面示例(二) 裁剪平面(osg::Scissor)示例(二)的代码如程序清单8-2所示 // 裁剪平面测试&#xff08;2&#xff09; void scissor_8_2(const string strDataFolder) { osg::ref_ptr<osgViewer::Viewer> viewer new osgViewer::Viewer(); osg::ref_ptr<osg::Gra…