热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CF1363ETreeShuffling(贪心+树上乱搞)

对于一些不符合的点来说,肯定是被他的父节点上权值最小的点转换最好。首先我们先排除不可能情况也就是01不等之后发现,交换完两个数后,0不符合的和1不符合的个数各自-1,因此不会影响其

对于一些不符合的点来说,肯定是被他的父节点上权值最小的点转换最好。

首先我们先排除不可能情况也就是01不等

之后发现,交换完两个数后,0不符合的和1不符合的个数各自-1,因此不会影响其他交换

因此我们维护一个最小值,表示父亲节点的最小值,如果这个值比当前节点小,那么显然在子树内部交换更好

之后只要dfs维护一下需要交换的01个数就好


技术图片技术图片

#include
using namespace std;
const int N=4e5+10;
typedef
long long ll;
int h[N],ne[N],e[N],idx;
ll a[N],b[N],c[N];
int cnt0[N],cnt1[N];
ll res;
void add(int a,int b){
e[idx]
=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int fa,ll tmp){
ll mi
=min(tmp,a[u]);
int i;
for(i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(j==fa)
continue;
dfs(j,u,mi);
cnt0[u]
+=cnt0[j];
cnt1[u]
+=cnt1[j];
}
if(b[u]!=c[u]){
if(b[u]==1)
cnt1[u]
++;
else{
cnt0[u]
++;
}
}
int x=min(cnt1[u],cnt0[u]);
if(mi==a[u]){
cnt1[u]
-=x;
cnt0[u]
-=x;
res
+=2*x*a[u];
}
}
int main(){
int n;
cin
>>n;
memset(h,
-1,sizeof h);
int i;
int tmp1=0,tmp2=0;
for(i=1;i<=n;i++){
scanf(
"%lld%lld%lld",&a[i],&b[i],&c[i]);
if(b[i])
tmp1
++;
if(c[i])
tmp2
++;
}
for(i=1;i){
int u,v;
scanf(
"%d%d",&u,&v);
add(u,v);
add(v,u);
}
if(tmp1!=tmp2){
cout
<<"-1"<<endl;
}
else{
dfs(
1,-1,a[1]);
cout
<endl;
}
}


View Code

 

CF1363E Tree Shuffling(贪心+树上乱搞)



推荐阅读
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
author-avatar
1986欠我一个拥抱_567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有