首页 > 其他分享 >P10145 [WC2024] 线段树 题解

P10145 [WC2024] 线段树 题解

时间:2025-01-04 13:15:54浏览次数:6  
标签:联通 rs 题解 线段 WC2024 ls P10145 区间 mathcal

P10145 [WC2024] 线段树 题解

\(\mathcal O(4^{n})\) 做法

对于线段树上的一个节点区间 \([l,r)\) 我们连无向边 \((l,r)\),那么可以用加减表示出一个区间 \([L,R)\) 等价于 \(L,R\) 两点联通。

于是可以枚举每条边选或不选,用可撤销并查集判断两点是否联通,复杂度 \(\mathcal O(2^{2n-1}\alpha(n))\approx\mathcal O(4^n)\)。

特殊性质做法

特殊性质就是整个图联通。对与线段树上的每个区间,令 \(f_o,g_o\) 分别表示区间联通与不连通的方案数,有:

\[f_o=2f_{ls}f_{rs}+f_{ls}g_{rs}+f_{rs}g_{ls}\\ g_o=f_{ls}g_{rs}+f_{rs}g_{ls} \]

在“线段树”上转移即可。

----------------------------------思路分界线---------------------------------------

\(\mathcal O(n^2m)\) 做法

因为我们不再需要让整个图联通,所以不能简单的记录是否联通,由于每次增加一个大区间,总是把最左边的与最右边的联通,所以我们记 \(f_o\) 表示区间联通,\(g_{o,j}\) 表示区间不连通且 左端点最远与 \(j\) 联通的方案数,则:

\[\begin{aligned} &f_{ls}f_{rs}\to f_o\\ &f_{ls}g_{rs,j}\to f_o,f_{ls}g_{rs,j}\to g_{o,j}\\ &g_{ls,j}f_{rs}\to f_o,g_{ls,j}f_{rs}\to g_{o,j}\\ &g_{ls,j}g_{rs,k}\to f_o,g_{ls,j}g_{rs,k}\to g_{o,j} \end{aligned} \]

对于第四组转移,区间 \((j,k)\) 在也无法与外界联通,所以转移时要求每个需要确定的区间 \([L,R)\) 要么都在里面,要么都在外面。

最后答案就是 \(f_{root}+g_{root,i}\),其中 \(i\) 满足每个 \([L,R)\) 要么都在 \([0,i)\) 里面,要么都在 \([0,i)\) 外面,直接转移+枚举 \([L,R)\) 做到 \(\mathcal O(n^2m)\)。

\(\mathcal O(n^2)\) 做法

对于每个 \([L,R)\) ,使用异或Hash,随机一个权值 \(v\),\(q_L\oplus v\to q_L,q_R\oplus v\to q_R\),最后令 \(V\) 表示 \(q\) 的前缀异或和,那么第四组的转移限制相当于要求 \(V_j=V_k\),这样避免了直接枚举限制。

\(\mathcal O(n\log n)\) 做法

直接将转移中的 \(j\) 替换成 \(V_j\) 那么转移变成了:

\[\begin{aligned} &f_{ls}f_{rs}\to f_o\\ &f_{ls}g_{rs,j}\to f_o,f_{ls}g_{rs,j}\to g_{o,j}\\ &g_{ls,j}f_{rs}\to f_o,g_{ls,j}f_{rs}\to g_{o,j}\\ &g_{ls,j}g_{rs,j}\to f_o,g_{ls,j}g_{rs,j}\to g_{o,j} \end{aligned} \]

可以用线段树合并解决,复杂度 \(\mathcal O(n\log n)\)。

参考

笋 - 洛谷专栏

标签:联通,rs,题解,线段,WC2024,ls,P10145,区间,mathcal
From: https://www.cnblogs.com/lupengheyyds/p/18651778

相关文章

  • 【题解】AT agc057A Antichain of Integer Strings
    记\(f(x)\)为最小的大于\(x\)的\(y\),使得\(x\)是\(y\)的子串。易得:\[f(x)=\min(10x,x+10^{|x|})\]其中\(|x|\)表示\(x\)的位数。可以发现,\(f(x)\)为一个严格单调递增的函数。考虑贪心策略,显然选小的数不如选大的数优,因为小的数更有可能成为别的数的子串。于是,我......
  • 网卡丢包问题解决
    1、查看局域网内是否有MAC冲突;2、UDP丢包可以先增大协议栈缓存空间:接收端:echo2129999999>/proc/sys/net/core/rmem_maxecho2129999999>/proc/sys/net/core/rmem_default发送端:echo2129999999>/proc/sys/net/core/wmem_defaultecho2129999999>/proc/sys......
  • Luogu P4287 SHOI2011 双倍回文 题解 [ 紫 ] [ manacher ]
    双倍回文:回文子串结论的经典应用。结论先放本题最关键的结论:一个字符串本质不同的回文子串最多只有\(n\)个。考虑如何证明:假设我们一个一个地在当前字符串(黑色部分)的结尾加入字符(红色部分),那么会出现如下情况:显然,加入红色字符后,字符串中最多只可能新出现一个本质不同的回文......
  • P1309 [NOIP2011 普及组] 瑞士轮 题解
    P1309[NOIP2011普及组]瑞士轮题目大意:for(i<=r)让这2n个选手的成绩降序排序,第1-第2打,第3-第4打,......,第2n-1和第2n打i--i+1打,谁能打赢?谁的实力大谁就打赢了排序最快是2nlogn,所以上述暴力过程,时间复杂度是:R(2nlog2n+2n)=2e8超时了解释:为什么是......
  • 题解:AtCoder [ARC176D] Swap Permutation
    题意原题链接给定一个长度为\(n\)的排列\(p\),并执行以下操作\(m\)次:选择\(1\leqi<j\leqn\),交换\(p_i\)和\(p_j\)。定义一个序列\(p\)的权值为\(\sum_{i=1}^{n-1}|p_i-p_{i-1}|\)。求在\(\binom{n}{2}^m\)种可能的操作后,\(p\)的价值之和。答案对\(998244353\)......
  • 题解:CF1830A Copil Copac Draws Trees
    首先这道题肯定不能暴力枚举,我们要思考其他算法。我们可以给每一条边编一个号。然后从根开始遍历这棵树,当一条边的编号比他祖先到他祖先的祖先的那条边的编号还要小时,就说明顺序错了,要再等一轮。这个就简单了,直接dfs就行,注意答案要加\(1\)。#include<bits/stdc++.h>using......
  • 深入理解 Java Set 集合:原理、应用与高频面试题解析
    深入理解JavaSet集合:原理、应用与高频面试题解析在Java中,Set是一种重要的集合接口,用于存储不重复的元素。无论是在实际开发中,还是在面试场景中,Set都是一个高频的知识点。本篇文章将详细介绍JavaSet集合的基础知识、常见实现类、应用场景以及面试常考题,最后通过总结帮助......
  • 题解:CF2044D Harder Problem
    CF2044DHarderProblem思路构造一个\(1\simn\)都出现了一次的数列(这样每个数都是众数了),然后只要保证在数组\(a\)里面出现了的数在最前面就好了。AC代码#include<bits/stdc++.h>usingnamespacestd;#defineN200005longlongt,vis[N],cnt,n,a[N];intmain(){ cin......
  • 题解 - 出栈序列(2022.10上海月赛丙组T5)
    题目描述给定一个长度为几的、仅由小写字母组成的字符串,将其按序依次放入栈中。请问在所有可能的出栈序列中,字典序最小的出栈序列是多少?输入格式输入第一行,一个正整数几输入第二行,一个长度为几的字符串输出格式输出所有出栈序列中,字典序最小的出栈序列数据范围对......
  • 题解 - 机会成本(2022.9上海月赛丙组T2)
    题目描述明天有门考试,今晚只能复习一门课,请计算应该复习哪一门课,才能让所有考试的分数总和达到最大,如果选择复习第之门课,则这门课的考试分数为a;,若放弃复习第之门课,则这门考试的分数为6;。输入格式第一行:单个整数表示n第二行到第n+1行:每行两个整数表示a;......