「刷题」GERALD07加强版

是LCT了。

首先我们不知道联通块怎么数。

然后颓标签知道了是LCT。

那么考虑一下怎么LCT搞。

有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数。

这个可以很简单的用主席树来实现对吧,只需要记录下来这种颜色上次出现的位置就可以了,然后在$[l,r]$中查询值在$[0,l-1]$中的数的个数。

然后联通块和这个有什么关系呢?

颜色的话为什么可以用这种方法代替呢?为了去重,而这道题中什么情况是所谓“重”的呢?

就是两条边链接了两个相同的集合的时候。

那么考虑以下一种算法。

用LCT维护生成树。动态加边,并查集维护联通性。

如果当前这条边链接的两个端点已经在一个集合中了,那么说明这条边可以替代掉之前的某一条边,记为$res[i]$那么这条边能够连接某两个集合的时候也就是在$[res[i]+1,i]$这个区间中,在LCT中查询最早的$res[i]$那么也就是当前这条边所能其作用的最早的端点,同时LCT删掉res[i],link上i。

如果当前这条边链接的两个端点没有在一个集合中,直接link上i。

那么考虑一个区间的答案。

每增加一个新的可以链接这个联通块的边,那么n个集合会变成n-1个。

也就是说,答案就是n减去这些边中真正能够链接两个不再同一集合中端点的边的个数。

那么其实也就是这段区间中res值小于l-1的数的个数。

主席树维护即可。

得解。

原文地址:https://www.cnblogs.com/Lrefrain/p/11566867.html

时间: 2024-10-13 00:41:59

「刷题」GERALD07加强版的相关文章

「C语言」「刷题」XUPT Online Judge经典题型

在学校OJ网( http://www.xyjudge.com/)上刷了一些题,有的题型值得整理在博客上. 3.6日才刚刚开始刷,慢慢添加那些比较经典的,并尽量用多种方法求解后思考哪一种最适合. 1 #include <stdio.h> 2 #include <math.h> 3 #define A 2 4 5 int f(int i,int k) 6 { 7 int j; 8 j=k*A*pow(10,i); 9 return j; 10 } 11 12 int main() 13

「刷题」JZPKIL

这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & = & \sum\limits_{i=1}^ngcd(i,n)^xlcm(i,n)^y\end{array}$ $\begin{array}{rcl} & = & \sum\limits_{i=1}^ngcd(i,n)^x\frac{(in)^y}{gcd(i,n)^y}\end{a

「刷题」Triple

正解是指数型母函数+FFT. 才学了多项式,做了一道比较好的题了. 首先有三个斧子被偷了. 我们考虑构造一种指数型母函数. 就是说一种多项式吧,我的理解. 系数是方案,下标,也就是所谓的元指数代表的是价值. 这样如果两个母函数相乘的话,指数相加,系数相乘. 正好就是两个单元合并之后的方案和价值. $A(x),B(x),C(x)$分别代表一把相同的斧子用价值为x,2把为x,3把为x的方案数. 容斥一下. 三把的答案就是$A(x)*A(x)*A(x)-C_3^1A(x)B(x)+2C(x)$ 解释一

「刷题」 网络

看了一下网上基本都是线段树二分的题解,然而我想到一种整体二分的思路,正好练习一下. 是道好题. 首先用树上ST表处理,用于求LCA. 考虑整体二分离线求解. 一种方法是用树链剖分的,复杂度是$O(log^2n)$的,在套上个整体二分,复杂度达到了$O(nlog^3n)$所以说不可以直接树剖暴力. 可以用树上差分的方式. 考虑假设对于当前询问二分出的某一个答案,如何$check$? 只需要判断这个点是否阻断了所有的权值大于这个答案的路径,如果是的话,那么放低上界,否则升高下界. 用整体二分来做这个

「刷题」你的名字

题真好. 也帮我回忆起了快两个月没动的\(SAM\). 我只能想到\(68\)分的数据. 题目要求给出一个串\(S\). 然后每次询问给出一个串\(T\)和两个变量\(l,r\) 要求出有多少个本质不同串是\(T\)的子串而不是\(S[l,r]\)的子串. 前面\(68\)分是\(l=1,r=n\)的. 直接做. 首先我们对\(S\)建出后缀自动机. 询问的时候,对\(T\)再次建出后缀自动机. 每次建出一个前缀节点的时候统计一下本质不同子串,同时记录此时前缀节点父亲的\(len\)值,如果是第

「刷题」Color 群论

这道题乍一看挺水的,直接$ Ploya $就可以了,可是再看看数据范围: $ n\lep 1e9 $ 那就是有1e9种置换,这不歇比了. 于是考虑式子的优化. 首先证明,转i次的置换的每个循环结大小是 $ gcd(i,n) $ 证明: 首先设第x个元素的位置是p,置换种类是i,循环k次后回到原点,k也就是循环结个数. $ ik+p \equiv p (mod n) $ $ ik \equiv 0 (mod n) $ $ n|ik $ $ i|ik $ 我们要让k最小,那么: $ ik=lcm(i

「原创题」红太阳

「题目描述」 我们都知道,红太阳会发出光芒.每天红太阳会等概率随机.不超过 $n$ 次地发出光芒,每次包含着 $a$ 个单位的热量. 我们都知道,只有在红太阳的照耀下,我们才能茁壮成长.每天每个人都希望得到 $c$ 个单位的热量,只有得到了 $c$ 个单位的热量,一个人才会满足,并高呼「红太阳万岁!」.而红太阳会满足尽量多的人. 问每天红太阳能满足的人的期望个数,为了避免浮点误差,将答案乘上 $n+1$ 对 ${10} ^ 9 + 7$ 取模后输出. 「做法1」类欧几里得算法 求 $\begin

路灯「APIO 2019」

题意 有.复杂,自己上网搜 思路 \((x,y)\) 表示从\(x\)到\(y\)联通的时间长度. 那么查询操作相当于二维平面上的单点查询. 对于每一个\(i\),维护一个最左能到达的\(lm\),和最右能到达的\(rm\). 那么对于每一个更新操作,相当于对左上角为\((lm,i)\),右下角为\((i,rm)\)的矩形做修改. 于是就转换为类似「简单题」的题目了,可以CDQ分治解决,当然也可以直接上树套树. 代码 #include <bits/stdc++.h> using namespa

LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

#6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合 E={E1,E2,?,Em} E = \{ E_1, E_2, \cdots, E_m \}E={E?1??,E?2??,?,E?m??},和进行这些实验