news 2026/4/18 3:42:35

Educational Codeforces Round 129 (Rated for Div. 2) F. Unique Occurrences 线段树分治

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Educational Codeforces Round 129 (Rated for Div. 2) F. Unique Occurrences 线段树分治

F. Unique Occurrences

time limit per test: 6 seconds

memory limit per test: 1024 megabytes

input: standard input

output: standard output


You are given a tree, consisting ofnnnvertices. Each edge has an integer value written on it.

Letf(v,u)f(v, u)f(v,u)be the number of values that appearexactly onceon the edges of a simple path between verticesvvvanduuu.

Calculate the sum off(v,u)f(v, u)f(v,u)over all pairs of verticesvvvanduuusuch that1≤v<u≤n1 \le v < u \le n1v<un.

DeepL 翻译:

给你一棵由nnn个顶点组成的树。每条边上都写有一个整数值。
假设f(v,u)f(v,u)f(v,u)是顶点vvvuuu之间简单路径的边上只出现一次的值的个数。
计算所有顶点vvvuuu之间的f(v,u)f(v,u)f(v,u)1≤v<u≤n1 ≤ v < u ≤ n1v<un

把每种颜色看为时间轴上的事件,进行分治处理。

简单来讲,我们用线段树分治,对于每种颜色全部删除后的树上的 dsu 进行统计,很显然,此时某一条边的贡献就是 左右两个连通块的大小的乘积,然后再把这种颜色的边加回来,再进行下一条边的枚举。

总的复杂度只有 n log n

vector<tuple<int,int,int>>e;vector<vector<PII>>col;intans;structop{intt,a,b;};classDSU{public:vector<int>f,siz;stack<op>save;DSU(){}DSU(intn){init(n);}voidinit(intn){f.resize(n+1);iota(range(f),0);siz.assign(n+1,1);}intfind(intx){returnf[x]==x?x:find(f[x]);}boolsame(intx,inty){returnfind(x)==find(y);}boolmerge(intx,inty){x=find(x);y=find(y);if(x==y){return0;}if(siz[x]>siz[y]){swap(x,y);}save.push({1,x,y});siz[y]+=siz[x];f[x]=y;returntrue;}voidrollback(){auto[t,x,y]=save.top();save.pop();if(t==1){siz[y]-=siz[x];f[x]=x;}else{}}size_tgetSnapshot()const{returnsave.size();}voidroll(inttar){while(save.size()>tar){rollback();}}intsize(intx){returnsiz[find(x)];}};template<typenameT>classSegmentTreeDC{public:inttot;// 时间点数(叶子数量)vector<vector<T>>tr;// 每个节点的操作列表SegmentTreeDC():tot(0LL){}SegmentTreeDC(int_T){init(_T);}voidinit(int_T){tot=max(1LL,_T);tr.clear();tr.resize(4LL*(tot+5));}// 插入一个操作 op 到闭区间 [l, r]voidinsert(intp,intL,intR,intl,intr,constT&op){if(l>r||l>R||r<L)return;if(l<=L&&R<=r){tr[p].push_back(op);return;}intmid=L+R>>1;insert(p<<1,L,mid,l,r,op);insert(p<<1|1,mid+1,R,l,r,op);}voidinsert(intl,intr,constT&op){if(l>r)return;insert(1,1,tot,l,r,op);}voiddfs(DSU&dsu){function<void(int,int,int)>dfs=[&](intp,intl,intr){size_t snap=dsu.getSnapshot();for(auto&e:tr[p]){dsu.merge(e.first,e.second);}if(l==r){for(auto[u,v]:col[l]){ans+=dsu.size(u)*dsu.size(v);}}else{intmid=(l+r)>>1;dfs(p<<1,l,mid);dfs(p<<1|1,mid+1,r);}dsu.roll(snap);};dfs(1,1,tot);}};voidsolve(){intn;cin>>n;e.resize(n+1);col.resize(n+2);for(inti=1;i<n;i++){intu,v,w;cin>>u>>v>>w;e[i]={u,v,w};col[w].push_back({u,v});}DSUdsu(n);SegmentTreeDC<PII>seg(n);for(inti=1;i<n;i++){auto&[u,v,w]=e[i];seg.insert(1,w-1,{u,v});seg.insert(w+1,n,{u,v});}seg.dfs(dsu);cout<<ans<<endl;}signedmain(){cin.tie(nullptr)->ios::sync_with_stdio(false);intT=1;// cin >> T;for(;T_<=T;T_++)solve();return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:33:49

该如何选择深圳进行算力服务器托管

在数字经济高速迭代的当下&#xff0c;算力已成为企业核心竞争力&#xff0c;而服务器托管作为保障算力稳定输出的关键载体&#xff0c;其选址与服务商选择直接影响业务连续性。深圳作为全球互联网骨干网核心节点、粤港澳大湾区数字枢纽&#xff0c;凭借得天独厚的网络资源、完…

作者头像 李华
网站建设 2026/4/17 19:52:17

i386 CPU页式存储管理深度解析

深入理解i386 CPU页式存储管理&#xff1a;原理、实现与核心思路 在x86架构的发展历程中&#xff0c;i386 CPU首次引入了完整的32位页式存储管理机制&#xff0c;为现代操作系统的虚拟内存、进程隔离、内存保护等核心功能奠定了硬件基础。与早期实模式的内存管理及286的段式保…

作者头像 李华
网站建设 2026/4/10 7:36:47

我的思维模型 -- 6.生物学篇

生物学自然选择 - 适者生存能活下来的&#xff0c;不是最聪明的&#xff0c;而是最能适应环境变化的《自私的基因》最好不要把自然选择的基本单位看作物种或者种群&#xff0c;甚至个体&#xff1b;最好把它看作遗传物质的某种小单位。为方便起见&#xff0c;简称为基因世界运行…

作者头像 李华
网站建设 2026/4/11 17:25:32

PyTorch torch.optim 优化器介绍与论文

目录概述常用优化器1. **SGD** (Stochastic Gradient Descent) - 随机梯度下降2. **Adam** (Adaptive Moment Estimation) ⭐ 最常用3. **AdamW** (Adam with Weight Decay) ⭐ PI0.5 使用4. **RMSprop** (Root Mean Square Propagation)5. **Adagrad** (Adaptive Gradient)6. …

作者头像 李华
网站建设 2026/4/15 23:19:06

2026现在这个时代,C语言真的不行了吗?

C语言在2026年&#xff08;以及可预见的未来&#xff09;绝对没有“不行了”&#xff0c;它依然至关重要且不可替代。 那些宣称C语言“不行”或“过时”的说法&#xff0c;往往忽略了它在现代计算基础设施中扮演的核心、底层、高性能角色。C语言在2026年依然强大且不可或缺的原…

作者头像 李华
网站建设 2026/4/16 15:16:19

人工智能治安管控系统

人工智能治安管控系统 基于大数据平台的人工智能治安管控系统&#xff0c;实现人脸识别和视频行为分析功能。通过人脸识别技术&#xff0c;实现实时监控、路人抓拍、人脸库检索、重点人员布控、路人检索、报警信息查询&#xff1b;采用视频行为分析技术&#xff0c;对非法闯入、…

作者头像 李华