树上形态改变统计贡献:1025T4
http://cplusoj.com/d/senior/p/SS231025D
答案为 ∑ w [ x ] − w [ s o n [ x ] ] \sum w[x]-w[son[x]] ∑w[x]−w[son[x]], x x x 非儿子
要维护断边,LCT固然可以,但不一定需要
发现如果发生了变化,只会由重儿子变成次重儿子
所以我们首先要维护次重儿子
同时我们拿树状数组维护其所有祖先的重儿子与次重儿子之差。
此时我们只需要在树状数组对应位置进行查询即可
#include<bits/stdc++.h>
using namespace std;
//#define int long long
inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//mt19937 rand(time(0));
//mt19937_64 rand(time(0));
//srand(time(0));
#define N 500010
//#define M
//#define mo
struct node {int y, id;
};
int n, m, i, j, k, T;
int ans[N], w[N], nxt[N], totans, son[N], sum[N];
int u, v, su, sv, flg;
vector<node>G[N]; struct Binary_tree {int cnt[N], sex; void add(int x, int y) {
// if(sex) printf("Add %d : %d\n", x, y); if(!x) {cnt[0]+=y; return; }while(x<=n) cnt[x]+=y, x+=x&-x; }int que(int x) {int ans=0; while(x) ans+=cnt[x], x-=x&-x; return ans+cnt[0]; }
}Bin, B1;void dfs1(int x, int fa) {w[x]=1;for(auto t : G[x]) {int y = t.y; if(y == fa) continue; dfs1(y, x); w[x]+=w[y]; sum[x]+=sum[y]; if(w[y]>w[son[x]]) nxt[x]=son[x], son[x]=y; else if(w[y]>w[nxt[x]]) nxt[x]=y; }if(son[x]) totans+=w[x]-w[son[x]], sum[x]+=w[x]-w[son[x]];
// printf("sum[%lld] = %lld || %lld %lld || %d\n", x, sum[x], son[x], nxt[x], w[x]);
}void dfs2(int x, int fa, int dep, int p) {for(auto t : G[x]) {int y = t.y, id = t.id; if(y == fa) continue;
// printf("%d->%d\n", x, y);
// dfs2(y, x); if(y == son[x]) {Bin.add(w[son[x]]-w[nxt[x]], w[son[x]]-w[nxt[x]]); B1.add(w[son[x]]-w[nxt[x]], 1); ans[id]=totans-sum[y]+Bin.que(w[y])-w[y]*dep+(p+1-B1.que(w[y]))*w[y]; if(!nxt[x]) --ans[id];
// if(id==4) printf("%d(totans) %d(-sum[y]) %d(_change_son) %d(-size) %d(+son)\n",
// totans, sum[y], Bin.que(w[y]), w[y]*dep, (p+1-B1.que(w[y]))*w[y]); dfs2(y, x, dep+1, p+1); Bin.add(w[son[x]]-w[nxt[x]], -(w[son[x]]-w[nxt[x]])); B1.add(w[son[x]]-w[nxt[x]], -1); }else {
// if(id==2) printf("%d(totans) %d(-sum[y]) %d(_change_son) %d(-size) %d(+son)\n",
// totans, sum[y], Bin.que(w[y]), w[y]*dep, (p-B1.que(w[y]))*w[y]); ans[id]=totans-sum[y]+Bin.que(w[y])-w[y]*dep+(p-B1.que(w[y]))*w[y];
// B1.add(w[son[x]]-w[nxt[x]], 1); dfs2(y, x, dep+1, p);
// B1.add(w[son[x]]-w[nxt[x]], -1); }}
}signed main()
{
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);freopen("tree.in", "r", stdin);freopen("tree.out", "w", stdout);
// T=read();
// while(T--) {
//
// }n=read(); for(i=1; i<n; ++i) {u=read(); v=read(); if(i==1) su=u, sv=v; G[u].pb({v, i}); G[v].pb({u, i}); }Bin.sex=1; dfs1(su, sv); dfs1(sv, su); totans+=n-max(w[su], w[sv])-1;
// printf("> %d\n", totans); if(w[su]>w[sv]) {Bin.add(w[su]-w[sv], w[su]-w[sv]); B1.add(w[su]-w[sv], 1); flg=1; }dfs2(su, sv, 2, flg);if(w[su]>w[sv]) {Bin.add(w[su]-w[sv], -(w[su]-w[sv])); B1.add(w[su]-w[sv], -1); flg=0; }// printf("# %lld\n", sv); if(w[sv]>w[su]) {Bin.add(w[sv]-w[su], (w[sv]-w[su])); B1.add(w[sv]-w[su], 1); flg=1; }dfs2(sv, su, 2, flg);if(w[sv]>w[su]) {Bin.add(w[sv]-w[su], -(w[sv]-w[su])); B1.add(w[sv]-w[su], -1); flg=0; }for(i=2; i<n; ++i) printf("%d\n", ans[i]); return 0;
}相关文章:
树上形态改变统计贡献:1025T4
http://cplusoj.com/d/senior/p/SS231025D 答案为 ∑ w [ x ] − w [ s o n [ x ] ] \sum w[x]-w[son[x]] ∑w[x]−w[son[x]], x x x 非儿子 要维护断边,LCT固然可以,但不一定需要 发现如果发生了变化,只会由重儿子变成次重儿子…...
如何处理与智能床相关的医疗建议和医疗器械证明?
如何处理与智能床相关的医疗建议和医疗器械证明? 摘要:作为一名iOS技术博主,我遇到了一个困扰,我的应用在审核中被拒绝了。这次拒绝涉及到我们公司生产的智能床,该床收集用户的体征数据并提供睡眠建议。苹果指出我们未…...
云原生之深入解析如何合并多个kubeconfig文件
项目通常有多个 k8s 集群环境,dev、testing、staging、prod,kubetcl 在多个环境中切换,操作集群 Pod 等资源对象,前提条件是将这三个环境的配置信息都写到本地机的 $HOME/.kube/config 文件中。默认情况下kubectl会查找$HOME/.kub…...
Netty实战-实现自己的通讯框架
通信框架功能设计 功能描述 通信框架承载了业务内部各模块之间的消息交互和服务调用,它的主要功能如下: 基于 Netty 的 NIO 通信框架,提供高性能的异步通信能力;提供消息的编解码框架,可以实现 POJO 的序列化和反序…...
S4.2.4.3 Electrical Idle Sequence(EIOS)
一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下,发送器想要进入电器空闲状态的时候,发送器必须发送EIOSQ,也既是:电器Electrical Idle Odered Set Sequenc…...
MySQL的优化利器:索引条件下推,千万数据下性能提升273%
MySQL的优化利器:索引条件下推,千万数据下性能提升273%🚀 前言 上个阶段,我们聊过MySQL中字段类型的选择,感叹不同类型在千万数据下的性能差异 时间类型:MySQL字段的时间类型该如何选择?千万…...
回归预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期神经网络多输入单输出回归预测
回归预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期神经网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiLSTM贝叶斯优化双向长…...
SOCKS5代理在全球电商、游戏及网络爬虫领域的技术创新
随着全球化进程的加速,跨界电商和游戏行业的出海战略愈发重要。在这个大背景下,技术如SOCKS5代理和网络爬虫成为连接不同领域、优化用户体验和提升市场竞争力的重要桥梁。本文将深入探讨SOCKS5代理技术在跨界电商、游戏和网络爬虫领域的应用及其对行业发…...
Flutter extended_image库设置内存缓存区大小与缓存图片数
ExtendedImage ExtendedImage 是一个Flutter库,用于提供高级图片加载和显示功能。这个库使用了 image 包来进行图片的加载和缓存。如果你想修改缓存大小,你可以通过修改ImageCache的配置来实现。 1. 获取ImageCache实例: 你可以通过PaintingBinding…...
第2篇 机器学习基础 —(1)机器学习概念和方式
前言:Hello大家好,我是小哥谈。机器学习是一种人工智能的分支,它使用算法和数学模型来使计算机系统能够从经验数据中学习和改进,而无需显式地编程。机器学习的目标是通过从数据中发现模式和规律,从而使计算机能够自动进…...
LiveGBS流媒体平台GB/T28181常见问题-海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析
LiveGBS常见问题海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析? 1、硬件NVR配置接入示例2、通道数为0处置2.1、判断信令是否畅通2.1.1、点击更新通道2.1.2、有成功提示2.1.2.1、确认设备的视频通道编码是否填写2.1.2.2、确认是否超过授权数目…...
在项目中同时使用SpringCloud和Dubbo,注册中心选用Eureka?
文章目录 一、前置知识1、在Spring Boot中使用Dubbo?1)配置服务提供者2)配置服务消费者 2、在Spring Boot中使用Eureka?1)Eureka服务2)Eureka客户端 二、项目代码分析1、dubbo服务提供者1)启动类…...
蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC]
文章目录 蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 蓝凌EIS智慧协同平台saveImg接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责声明&…...
【好书推荐】《用户画像:平台构建与业务实践》
作者简介: 懒大王敲代码,正在学习嵌入式方向有关课程stm32,网络编程,数据结构,C/C等 哈喽!各位铁汁们大家好啊,今天给大家推荐的的是机械工业出版社的 《用户画像:平台构建与业务实践》这本书&a…...
JavaScript进阶 第二天笔记
JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。 了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用…...
AUTOSAR AP 硬核知识点梳理(2)— 架构详解
一 AUTOSAR 平台逻辑体系结构 图示逻辑体系结构描述了平台是如何组成的,有哪些模块,模块之间的接口是如何工作的。 经典平台具有分层的软件体系结构。定义明确的抽象层,每个抽象层都有精确定义的角色和接口。 对于应用程序,我们需要考虑使用的软件组件,希望它们是可重用的…...
k8s-----23、Taint和Toleration、污点和容忍
1、使用场景 生产环境部署规则 1、master节点不允许部署其他类型的pod节点 2、新增node节点需要经过测试才可投入使用,才允许pod部署在该节点 3、维护/升级node节点时,需要将节点上的pod提前进行迁移 4、特殊节点:比如这个节点是SSD/GPU类型…...
全面解析优化企业Microsoft 365网络的加速方案
您的员工是否有因为Microsoft 365频繁掉线、卡顿、无法登录而向IT部门抱怨过? 很多时候企业会以为是自身网络带宽不足才导致访问失败,但是在采取增加带宽的方案后,办公文档协同打开仍旧很慢,文件分享依旧需要等待较长的时间&…...
Xilinx MicroBlaze定时器中断无法返回主函数问题解决
最近在使用Xilinx 7系列FPGA XC7A100T时,运行MicroBlaze软核处理器,添加了AXI TIMER IP核,并使能定时器溢出中断,发现定时器触发中断后,无法返回主函数的问题,最后发现修改编译器优化等级就正常了。 FPGA型…...
Spark SQL概述与基本操作
目录 一、Spark SQL概述 (1)概念 (2)特点 (3)Spark SQL与Hive异同 (4)Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 (2)代码演…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
