zjoi2019 语言

news/2025/11/23 21:59:45/文章来源:https://www.cnblogs.com/hnczy/p/19261655

好题好题。

我们先对一个结点 \(u\) 进行分析。

发现能对 \(u\) 产生贡献的所有结点可以构成一个联通分量。

只有经过 \(u\) 才会对 \(u\) 产生贡献。

而我们不可能将一条链上的所有点都扔到 \(u\) 上,这显然不现实,肯定是进行计算,算出来的,而且光一个结点都需要 \(O(n^2)\) 的内存,明显很没有前途。

考虑一条链的两端 \(l,r\) 挂在 \(u\) 上,类似一个虚树,考虑有 \(n\) 个叶子的时候我们是如何计算一颗虚树的大小的。

先对其的 dfs 序排序,\(siz = \sum dep_{a_i} - \sum dep_{LCA(a_i,a_i+1)} - dep _{LCA(a_1,a_n)}\)。dfs 序从小到大放,加入 dep 的时候会与 dfs 前面那一个产生交错, 这一部分就是 \(dep_{LCA(a_i,a_{i-1})}\) 。 最后我们因为钦定了 1 为根,去掉的话就是 \(-dep_{LCA_{i=1}^n a_i}\) 有dfs 序的性质可知其等于 \(-dep_{LCA(a_1,a_n)}\)

好了那我们需要将所有的结点都算出来,明显可以树上差分。而我们发现如上的操作刚好可以使用线段树来维护,那树上的线段树肯定会想到线段树合并,不然这空间都得炸。

代码:

#include<bits/stdc++.h>
#define hnczy "language"
using namespace std;
const int N=5E5+5;
int st[20][N],dfn[N],lg[N];
int dep[N],fa[N],cnt,n,m;
vector<int>e[N],del[N];long long ans;
int calc(int x,int y){return dep[x]<dep[y]?x:y;}
int LCA(int x,int y){if(!x || !y)return 0;if(x==y)return x;x=dfn[x],y=dfn[y];if(x>y)swap(x,y);int tmp=lg[y-x++];return calc(st[tmp][x],st[tmp][y-(1<<tmp)+1]);
} 
struct SEG{struct node{int ls,rs,L,R,val,c;}c[N<<4];#define ls(p) c[p].ls#define rs(p) c[p].rs#define mid ((l+r)>>1) int rt[N],tot;void pushup(int p){c[p].L= c[ls(p)].L?c[ls(p)].L:c[rs(p)].L ;c[p].R= c[rs(p)].R?c[rs(p)].R:c[ls(p)].R ;c[p].val =c[ls(p)].val +c[rs(p)].val - dep[LCA(c[ls(p)].R,c[rs(p)].L )] ;}int query(int u){return c[u].val - dep[LCA(c[u].L,c[u].R)] ;}void change(int &p,int l,int r,int x,int w){if(!p)p = ++tot; if(l==r){c[p].c +=w;c[p].val = (c[p].c ? dep[x]:0);c[p].L = c[p].R = (c[p].c ? x:0);return ;}if(dfn[x]<=mid)change(ls(p),l,mid,x,w);else change(rs(p),mid+1,r,x,w);pushup(p); }void merge(int &p,int q,int l,int r){if(!p || !q)return p|=q,void();if(l==r)return c[p].c += c[q].c , c[p].val |= c[q].val, c[p].L |= c[q].L , c[p].R |= c[q].R,void() ;merge(ls(p),ls(q),l,mid),merge(rs(p),rs(q),mid+1,r);pushup(p);}
}seg;void dfs1(int u,int F){dep[u] =dep[F] +1,fa[u] =F;st[0][dfn[u] = ++cnt]=F;for(int v:e[u])if(v!=F)dfs1(v,u);
}void dfs2(int u){for(int v:e[u]) if(v!=fa[u])dfs2(v);for(int v:del[u]) seg.change(seg.rt[u],1,cnt,v,-1);ans+=seg.query(seg.rt[u]);seg.merge(seg.rt[fa[u]],seg.rt[u],1,cnt); 
}
int main(){freopen(hnczy ".in", "r", stdin);freopen(hnczy ".out", "w", stdout);scanf("%d%d",&n,&m);for(int i=1,u,v;i<n;i++){scanf("%d%d",&u,&v);e[u].push_back(v);e[v].push_back(u);  }dfs1(1,0);for(int i=1;i<=19;i++)for(int j=1;j+(1<<i-1)<=n;j++)st[i][j] = calc(st[i-1][j],st[i-1][j+(1<<i-1)]);for(int i=2;i<=n;i++)lg[i] = lg[i>>1]+1; for(int i=1,u,v;i<=m;i++){scanf("%d%d",&u,&v);int lca= LCA(u,v);seg.change(seg.rt[u],1,cnt,u,1);seg.change(seg.rt[u],1,cnt,v,1);seg.change(seg.rt[v],1,cnt,u,1);seg.change(seg.rt[v],1,cnt,v,1);del[lca] .push_back(u),del[lca].push_back(v);del[fa[lca]] .push_back(u),del[fa[lca]].push_back(v);}dfs2(1);cout<<ans/2; return 0;
}

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

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

相关文章

Java基础(代码块,内部类,函数式编程,常用API,GUI编程)

Java基础(代码块,内部类,函数式编程,常用API,GUI编程) 代码块静态代码块:static 类加载时自动执行,由于类只会执行一次,所有静态代码块也只会执行一次 完成类的静态资源初始化 比main方法先加载。实例代码块:…

python: 把png的透明背景转为指定颜色

一,代码: import base64 import numpy as np from PIL import Image import io from PIL import Image, ImageFilter from io import BytesIOdata_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAA…

代码源2025长训_noip

NOIP 11/4 Day 1 A 题解:题读错浪费 2h。注意到其实题目给定了每个点的所有出边的编号可能。这也就是说只要我们从叶子节点开始,由于叶子节点的度数为 \(1\) 则那条边一定会确定。那么我们如果从叶子开始往上转移,每…

PySpark - PCA

PySpark - PCA from pyspark.ml.feature import PCApca = PCA(k=2, inputCol=features, outputCol=pca_features) pca_model = pca.fit(df) pca_df = pca_model.transform(df) pca_df.show(truncate=False) +---+-----…

组合博弈 sg函数 Nim游戏的板子默写

简单的取子用sg(x)==0 判断不就可以了吗!!! 所有游戏单个子游戏的思想 1.sg(x)有向无环图上的棋子游戏 每个棋子和它的出边都构成单独的有向无环图 通过一个棋子的所有后继节点我们可以得到这个点的sg ans是所有点的…

详细介绍:Ribbon是如何与服务注册中心nacos交互的

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Day46(16)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project02\tlias-web-management

事务管理@Transactional(rollbackFor = {Exception.class})//事务管理的注解 - 默认出现RuntimeException才会回滚 @Override public void save(Emp emp) throws Exception{//1.保存员工的基本信息emp.setCreateTime(L…

完整教程:日本生活-东京新干线乘车经验-流程介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

代码随想录算法训练营第三天:链表part01

代码随想录算法训练营第三天:链表part01**203.移除链表元素 ** leetcode链接:https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所…

2025-07-21-Mon-T-RocketMQ

1. 核心功能 1.1 MQ介绍 RocketMQ基本组件Topic: 消息归类的基本单元 Queue: 消息队列 Producer Consumer ConsumerGroup: NameServer:可以理解为注册中心,负责更新和发现Broker Broker集群:Broker 可以有一个或…

第一章 简介

关于简介这一章,作者简单阐明了CPU,GPU过去的发展,以及它们的差异。除此之外,作者还引入了CUDA,介绍了CUDA的代码类型,以及全书的结构。 此章值得注意的点如下: 1、GPU上的晶体管数量超过CPU上的。 2、两设备之间…

2025-07-13-Sun-T-AI-LangChain4j

1. 认识AI 1.1 神经元介绍 黑马LangChain4j入门到实战项目: 项目地址 软件架构 前端:静态页面后端框架:SpringbootLangchain4j + Ollama持久化:本地文件存储对话记录 (resources/memory) 用户预约信息存储在内存(…

P24_现有网络模型的使用及修改

P24_现有网络模型的使用及修改24.1 VGG16网络模型: (1)打开pytorch(0.9.0)—torchvision.models—VGG(2)参数点击查看代码 pretrained (bool) – If True, returns a model pre-trained on ImageNet progress (bo…

20232403 2025-2026-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 主要内容:使用ARP扫描和nmap进行主机发现与端口扫描、Vsftpd后门漏洞获得root权限、Samba命令注入漏洞获取系统访问、Java RMI反序列化漏洞建立Meterpreter会话、PHP CGI参数注入漏洞。 掌握Metasploit命令…

第二讲类神经网络训练不起来

第二讲类神经网络训练不起来 一.优化失败的原因梯度为0有可能是local minima 和saddle point 因为计算优化的终止条件是梯度为0,但有可能梯度为0仅是局部最小值local minima或鞍点saddle point(多维,在某些维度是最…

【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统 - 教程

【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统 - 教程2025-11-23 21:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

2025-01-24-Fri-T-如何做一个开源项目

创建和维护一个开源项目是一个非常有意义的工作,它可以帮助你与全球开发者合作,同时建立个人或团队的影响力。以下是详细步骤,帮你从零开始创建一个成功的开源项目。 1. 确定项目目标 解决实际问题:选择一个对你或…

利用大语言模型分析技术支持诈骗Facebook群组的网络犯罪研究

本文介绍了一项利用大语言模型分析Facebook上技术支持诈骗群组的研究,涉及38万条帖子的分类分析,揭示了网络犯罪服务的运作模式和最新趋势。网络犯罪与刑罚:我们在APWG eCrimes会议上关于技术支持诈骗Facebook群组的…

一些唐话

学OI学的言论均为转载 不保证言论可读你干嘛直接放 *3500 啊?!正经比赛里不是这样的!你应该先放两个简单签到,然后提升我的心态。偶尔给我送送强点的大样例,然后在那个我上厕所的时候跟我有神秘互动。最后在某个我…

2025-05-29-Thu-T-设计模式

目录1. 设计模式相关内容介绍1.1 设计模式概述1.2 UML类图类的表示方式类之间的关系表示方法1.3 软件设计原则1.1 开闭原则1.2 里氏代换原则1.3 依赖倒转/依赖倒置原则1.4 接口隔离原则1.5 迪米特法则1.6 合成复用原则…