自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 [NOI2022] 挑战 NPC Ⅱ(树哈希)

考虑所有儿子,如果树哈希的值相同就直接匹配,否则用check判断是否匹配,最后用匈牙利跑一遍二分图匹配,看看能不能把小的那个全部都匹配掉。给你两个棵树,判断能否删去大的一棵的某几个点使得同构,保证树的大小只差不超过5。因为差最多为5,无论怎么拆5取平方,都不会大于25,所以时间复杂度为。为根的子树是否能删点使得同构。一个树哈希的题目,考虑。

2024-09-18 14:53:36 473

原创 [NOI2022]冒泡排序

然后我就想了一个不太严谨的贪心:小的b一定比大的b能够变化的空间更多,因此我们一定是先处理大的b,在用小的b去将就大的b。所以我们就先填大的,再填小的。然后我们可以发现,空的格子里面填的最优的数一定是从小到大的,否则交换能得到更优的结果。而且,加入我给某个格子填了i,那么这个最优的值一定是把左边连续的若干个变成i,而不会改变更大的最优的数的格子。这个线段树维护当前最优解和改成bi之后逆序对数的差值,只需要在确定某个点的之以后把左边增加1,右边减少1即可(类似)。,因为大的会覆盖小的,大的。

2024-09-17 20:41:42 830

原创 2024ICPC网络赛1: C. Permutation Counting 4

赛后得知这是一个很常见的套路,但自己感觉能想到行列式已经非常的不容易。而且求解行列式可以建立n+1个点,给点。连边,判断是不是树即可。原理就是线性相关的几个行向量系数都是1和-1,就相当于往左跳或者往右跳。这道题在比赛的时候被卡了很久,我尝试猜各种结论,但是发现都行不通。导致了整个比赛的节奏很糟糕。最令人难过的是,我在一本竞赛书里面查积分表的时候发现旁边已经写了这个结论。然后我就想着左端点相同的可以用最短的来消元,然后用线段树合并来维护。列全部填1,其它都是0,求这个行列式的奇偶性。

2024-09-17 12:23:12 1039

原创 thucampday3 K. Conference

也就是外面的线段刚好保留一半,然后我就立即意识到应该只用在原来的m个里面保留前一半或者后一半,仔细思考以后发现这是正确的,因为我们只用考虑外面线段左端点的坐落在那一半里面,任何一条外面的线段属于哪一半都是可以唯一确定的,因此这样肯定是正确的。我的直觉告诉我这些线段一定是连在一起的,然后我就想处理出每个线段之后的下一条线段,然后就会连成很多棵树,然后枚举开头找连续。首先考虑怎么求最多的不相交的线段,很明显只要把所有线段的右端点排序,然后能插进去就插进去。条线段,使得最多不相交的线段为。个最多能多选多少个。

2024-09-12 09:55:35 306

原创 thucampday3 F. Choosing a Capital

首先,考虑怎么在固定根和最大距离d(容易想到二分)的时候判断是否可以。我们只需要不断找距离根最远的点,然后往上跳d-1个,然后把子树截掉。题意:给你一个n个点的树,你要求出以第i个点为根,把边全部变成父亲到儿子的有向边,你可以添加不超过k条有向边,使得距离根的最大距离最小,你要求出每个点作为根的答案。观察发现,相邻点之间的答案只差不超过1,因此可以先求出一个的答案,然后和换根法一起遍历一遍即可,就能优化掉一个log。然后可以想到可以用换根法来维护距离,然后二分处理。一道很有难度的题目,想了很久才有思路。

2024-09-11 23:14:11 345

原创 thucampday1 A. Palindromization

给你一个序列,长度为n,你每次操作可以选择任意一个区间,并给区间里面每个数加上不超过k的正整数,让你用最少的操作使得序列变成回文。1<=k<=3n<=106,特别地,当k3n<=1000。

2024-09-03 14:57:52 753

原创 一种后缀数组的奇妙运用

大部分人都是用后缀自动机做,我也是这样感觉的,不过想了好一会儿也没有很清晰的思路,但是突然想到了一个用后缀数组建树的方法,我2h码了7kb的代码,但是居然能够一遍过,有点不可思议。种,而且每一类必然是一直往上的一条链,我们完全可以把每一类以一个点表示,因此我们只需要建出归类以后的树即可。然后我们把原来的字典树上的点按照子树中有哪些后缀分类,总共有不超过。构成的字典树,某个节点会不会出现取决于它的子树中是否存在被选择的。反转,求所有字符串构成的trie树的大小的期望值。后缀,然后在合并后的字典树往上跳即可。

2024-08-29 20:36:10 525

原创 牛顿迭代法

牛顿迭代是一种求方程近似根的方法,我们平常用来求近似根的方法通常是二分,但是二分只适用于单调的情况。如果是二次函数,就需要先找到极值左右两边各两个大于0或者小于0的情况,但是牛顿迭代只需从负无穷和正无穷开始迭代即可。,然后一次迭代,每一次迭代都会于精确解的误差变为一半(书上这样说的,但应该只有比较接近精确解的时候才成立,比如函数。,如果你取一个比较大的点,那么就会迭代到一个负数)。最近学习数学建模学到了牛顿迭代。牛顿迭代的具体操作如下:选择点。

2024-08-28 08:34:51 395

原创 ABC367G-Sum of (XOR^K or 0)

现在考虑怎么求每一项有多少个1,我们直接把所有的数放进要进行FWT的数组,即考虑多项式。的FWT每一项要么是1要么是-1,如果我们知道在求完FWT第。进行FWT,然后点乘起来,最后再求一次逆,但是这样是。,设有x个1,y个-1,那么FWT以后的答案是。我们统计出每个异或值出现多少次,记为。位有多少个多项式为1,设有。,这要预处理一下就能求了。第一次学会多项式的题目。不妨把y看成常数,满足。,现在思考如何化简。,所以可以解出变量。

2024-08-27 16:09:02 865

原创 gym105139C

因为我们要让最后剩下的凸点最少,所以肯定选择1会比2更加优秀,也就是找到凹点-凹点切割的最大次数,做法就是将所有的切割方法先预处理出来,因为可以分为横切和竖切,如果某个横切和某个竖切相交,就连边,因此可以建立二分图,然后跑最大独立集即可。首先,我们将270°的角称为凹点,90°的角称为凸点,很明显我们的目标是要把全部的凹点切掉,剩下的全都是凸点,那就一定是若干个矩形。需要注意的是,这个顶点数计算的时候需要考虑顶点相交的矩形的情况,这种情况要顶点应该要算两个才行。再切完剩下的凹点以后,总顶点的个数是。

2024-07-28 09:55:22 263

原创 ICPC2023合肥站:D. Balanced Array

考虑一段数,我们把它复制成三份,第一份不变,第二份往左边移动k个位置,第三份往右边移动k个位置,那很明显就是上下的和等于中间的两倍。基本都很大(相对于(n-1)/2),因此我们维护最大的20个满足条件的k即可。显然,对于每个k,它所满足要求的i肯定是一个区间。这道题我也没有想到正解,用了一个奇技淫巧过了。后面看到题解居然能够用哈希进行快速的判断。我们不难发现,满足条件的。

2024-07-16 12:02:56 322

原创 2023ICPC济南站:B. Graph Partitioning 2

考虑树的dfs序,每次操作就是把两个区间合并, 那么我们每次合并就把交界处两边的t个点互相连边,那么任何两个点之间最多1条边,如果两个点距离超过2t,就不会再连边,因此连边的总数是。的个数即可,直觉告诉我这个数量不是很多,所以直接把每个节点的儿子用背包合并即可。题意问你有多少种删边的方法使得树剩下的连通块大小为k或者k+1。不妨设1为根节点,如果某个节点连向父亲的边被删除,那么就可以根据。连向父亲的边被删除以后的方案数,然后我们记录一个点的子树里面删掉。这样不会超时,后面才知道这样的复杂度是。

2024-07-16 11:55:09 829

原创 【2023ICPC网络赛I 】E. Magical Pair

因为我当时完全不了解原根,因此做不了这个题目,更看不懂题解,但是我现在已经大概掌握原根的知识,所以感觉做这道题还算比较轻松,而且这道题里面刚好就用到了曾经想到的质因数分解+高维前缀和,感觉十分有趣,于是写博客记录。以内的质数(实测表明n-1的所有素因子都不会超过4*10^14,所有我只用处理出这么多),然后分解完质因数就用高位前缀和把。我们就考虑每个集合的最小的数,那么只有它的因子所在的集合会出现这个数,实际上就是一个周期出现一次,因此,我们就必须算出每个数出现的次数,答案就是这个出现次数的平方和。

2024-07-04 14:53:37 807

原创 2024上海大学生程序设计竞赛I-六元组计数&原根知识详解

以前基本没有了解原根相关的一块内容,最近正好碰到了这个题,于是写一篇博客记录一下。这道题的总体思路就是比较明显,就是先算出ap=xa^p=xap=x对于每个xxx的解的个数,然后NTT算一下即可。先来讲一下怎么求欧拉函数ϕ(x)\phi (x)ϕ(x),即1到x−1x-1x−1中与xxx互素的数的个数,我们一般在线性筛里面通过递推来求出这个函数。也就是我们要找出ϕ(i∗p[j])\phi(i*p[j])ϕ(i∗p[j])和ϕ(i),ϕ(p[j]),i,p[j]\phi (i),\phi(p[j]),i

2024-07-03 09:47:25 1016

原创 洛谷U389682 最大公约数合并

所以,现在应该把前面有相同的和剩下的全部不同的数分成两个组,然后给这两组分配合并次数,难点就是要怎么求在给定的次数时全部不同组的选择方法,但是我没有坚定的往这个方面想。后合并,也就是说无影响合并只会发生在相同的数之间,因此我们把无影响的数提出来考虑,所以剩下的都是不同的。,那么我们可以通过合并使得该联通块剩下两个数,其中有一个还没有与任何的数合并。虽然第一次选择8和16合并是最优的,但是如果合并两次的话8 11 11是最优的。、有1的情况就是前k+1个,也就是说,很多情况下取前k+1都是最优的。

2024-06-27 19:16:03 680

原创 Dilworth定理学习笔记

第一道是[TJOI2015] 组合数学,让你在一个矩阵中用最少的只能往右和往下的路径覆盖掉全部的点(点有权值)。这道题我一开始是用贪心做的,思考时模拟路径变化的过程其实挺复杂的,但是我做的时候总是隐隐约约的感觉有一种很好的性质,但是找不到。后面看了题解,发现用了Dilworth定理就能直接把DAG上的最小覆盖转换成最大独立集,在这一道题目中就是左下和右上的两个点,确实很厉害。而Dilworth定理就是:对于一个偏序集,其最少反链划分=最大链,最少链划分=最大反链。,它的任意两个元素可比(指存在关系)。

2024-06-27 11:23:20 488

原创 RUC2024《综合设计》期中测试

然后考虑两行的情况,我的思路是在第一行已经确定路径的基础上将第二行加上,如果只靠第一行的路径没有办法满足第二行的全部需求,那么我们再给第二行添上能够恰好满足条件的路径,这些路径显然是先下到第二行再往右边走。,显然我们要在每一个点都让最多的路径往下,使得剩下的路径在全部往右走的情况下能够满足每一个点的要求,具体实现大家可以自己去想,不过思路都是一样的,这里只是提供其中实现方法。右边的最大值mx小于x,那么就可以把x-mx的路径提前往下走,剩下的路径显然是可以满足要求的。的路径条数,这些路径刚好就是从第。

2024-06-26 12:20:38 853

原创 CF1841F Monocarp and a Strategic Game

于是,我们把所有的向量挪到原点,并按照极角排序,然后将一条过原点的直线旋转,并不断统计直线一侧的向量之和,答案即使最大值。以内的向量全部做垂线到这个方向上(并且称这些向量为这个方向的集合),然后全部加起来即可。显然,答案即使和最大的方向。然后根据题目的提示,感觉可以转化成一个平面图来做,也就是选择若干个向量使得它们的和的模最大。后面瞄了一眼题解,发现用的是一种叫做闵可夫斯基凸包的做法,但从具体做法来讲和我的差不多。的,对于一个集合并不需要去考虑具体方向的值,只要把向量全部加起来即可。

2024-01-31 10:44:53 577 1

原创 欧拉图相关的生成与计数问题探究

最近学了一波国家集训队2018论文的最后一个专题。于是带上了一些我的注解。先放一波这个论文1.基本概念欧拉图问题是图论中的一类特殊的问题。在本文的介绍过程中,我们将会使用一些图论术语。为了使本文叙述准确,本节将给出一些术语的定义。定义 1.1.图 G 中与顶点 v 关联的边数(自环统计两次)称为图 G 中顶点 v 的度。特别地,对于有向图 G ,进入顶点 v 的边的条数称为顶点 v ...

2023-10-25 16:04:50 771 1

原创 带你从一个不同的角度体会后缀自动机的从无到有

在网上看了很多后缀自动机的题解,感觉他们都不是真正理解了这个算法。他们大多都喜欢罗列大量的性质和引理,并且对着大量片面、冗杂、令人头晕目眩的实际情况进行不修边幅的分类讨论,最后还要对着原本很简洁的代码进行复杂得令人令人发指的强行解释。我写这个文章的目的就是想揣测一下算法发明者的思想,让大家能更加简单并且全面的理解这个算法。再次声明一下,本人只学习到了parent-tree,并自己根据自己的理解把后缀自动机剩下的部分(构造)完善了出来,能够通过洛谷的模板,所以大家可以相信我的逻辑。

2023-09-26 12:46:13 149

原创 [IOI2019] 天桥

现在考虑正解,由于对称性,这里我们只讨论起点不在边界的其情况,这种情况会多增加三种类型的天桥:全部在在起点左边,包括起点,但起点的建筑够不到/够得到。如果够不到,我们依然要尝试尽可能早的上桥,因此只用取起点建筑左边第一能上桥的建筑和右边第一个能上桥的建筑。根据贪心的策略,高处的天桥一定会优于低处的天桥,因此我们可以对行走方式增加两条法则:1.不提前下天桥(要么上到别的天桥,要么就一直走到头);总的来说,这道题的思路不算很难,但是代码很难打,每一个板块的细节都很多,调试了很久才过。

2023-07-16 17:50:28 199

原创 TimusOJ 2042.Nikita

题意给你一个字符串sss和一个kkk,有mmm次查询,每次查询以后两种,第一种将字符串的一个区间修改成同一个字符,第二种是查询字符串一个区间内长度不超过k的回文串的个数。其中1<=∣s∣,m<=1051<=|s|,m<=10^51<=∣s∣,m<=105,1<=k<=501<=k<=501<=k<=50。Solution做这个题我真的花了很久,我第一次做这个题实在八月份,没有AC,到了11月份我重新想了一下这个题,用一个更加优秀

2021-11-05 19:50:44 229

原创 2017提高组初赛问题求解2

如图所示,A到B是联通的。假设删除一条细的边的代价是1,删除一条粗边的代价是2,要让A,B不连通,最小的代价是___, 最小代价的不同方案数是__。我突然想到了一个很妙的方法。我们把图里面的每个空格都看成一个点,将图形A,B之上的空白部分当作ST,之下的当成ED,然后图就变成这个样子。接着我们对此建一个图,最短路计数一下即可,以下是建出来后的图。(其中粗便以经标注了2,省略了一下一些不需要的边,括号中的数分别表示最短路和最短路的方案数)故答案为:4,9...

2021-09-18 10:09:33 393 1

原创 CF1548D2 Gregor and the Odd Cows (Hard)

题意:网格图上有n个点,不存在三点共线的情况,求面积为整数,内部点的个数为奇数的三角形个数。Solution简单的版本我做出来了,但是难的还差一点,主要是有几个性质没有发现。观摩大佬的做法,结合自己的理解写了一下题解。这道题其实就是一道找性质的题,我们很容易联想到皮克定理,即S=a+b2+1S=a+\frac{b}{2}+1S=a+2b​+1。这样就能够把求内部的点转化成求边上的点。然后我们在联系两个公式,一个是S=∣x1∗y2−x2∗y1∣2S=\frac{|x1*y2-x2*y1|}{2}S

2021-09-05 20:52:55 207 1

原创 TimusOJ 1577. E-mail

题意:给你两个字符串,定义第三个字符串是同时包括两个字符串的最短字符串,让你求第三个字符串的个数。Solution这道题我被我自己误导了。以前我貌似做过类似的题,不过当时没有做出来,原因是我不知道怎么处理重复的情况。然后这道题我想了很久处理重复的方法,不过貌似都不行,后面发现我是想复杂了。(注:f[i][j]f[i][j]f[i][j]表示的是最小值,a[i][j]a[i][j]a[i][j]表示的是第三个字符串,sum[i][j]sum[i][j]sum[i][j]表示的是个数)后面我仔细想了

2021-08-28 15:28:58 125

原创 TimusOJ 1476. Lunar Code

题意:给你n,mn,mn,m,让你求满足对于每一列jjj,满足a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1的iii不超过kkk个的01矩阵的个数。Solution我的思路一开始跑偏了。我把满足a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1的点设置为111,其他的点我设置为000,然后我尝试以行为状态,但是这样的状态数高达一亿多,还要记录每一行

2021-08-26 10:33:40 183

原创 TimusOJ 1395. Pascal vs. C++. Version 1,2

题意:给你n个数,让你找最长的等差数列。Solution想了好久,突然想出了一个非常妙的做法。首先用hash来记录每一个数(下标)。然后暴力枚举等差数列的第一项和第二项,假设两个数分别为x,yx,yx,y,判断如果2∗x−y2*x-y2∗x−y存在,就说明这个等差数列已经被找过,就不用管了,如果没有就暴力跳着找,输出的时候再跳一次就好了。Code#include<bits/stdc++.h>#define ll long long#define gc getchar#defin

2021-08-20 16:19:15 131 1

原创 1223. Chernobyl’ Eagle on a Roof

题意:n层楼,m个蛋(一样),每次实验从指定的楼层往下扔一个蛋,用最少的次数测试出最高的能使蛋摔下去不破裂层数。Solution不得不承认,这一道题的思路很妙。首先,不难想到一个O(n3)O(n^3)O(n3)的暴力:枚举楼层扔蛋,所需的实验次数就是max(s1,s2)+1max(s_1,s_2)+1max(s1​,s2​)+1,其中,s1s_1s1​表示蛋破裂后的实验次数,s2s_2s2​表示蛋不破裂的实验次数,然后找一个最小的楼层就可以了。#include<bits/stdc++.h&g

2021-08-18 11:48:32 117

原创 1171. Lost in Space

题意:有nnn层4∗44*44∗4的格子,每个格子有一个权值,你要从第111层的起点走到第nnn层的任意一个点,每一从只有一些格子能去到下一层,每个格子不能重复经过,求最大的平均权值。Solution这道题看起来不算难,但做起来会发现挺恶心的,卡空间卡得特别厉害。我花了差不多一个上午的时间AC这一道题。为了节省数组的空间,我们先处理每一层的内部,因为路径的条数十分有限,我们可以直接用暴力来处理。定义f[floor][x1][y1][x2][y2][k]f[floor][x_1][y_1][x_2][

2021-08-17 15:23:40 114

原创 2014. Zhenya moves from parents

这其实是一道傻逼题,但是花了我很多的时间去想。我的思路是根据暴力的做法来优化成正确的做法先给出暴力的代码:int ans=0,now=0;for(int i=1;i<=n;i++){ now+=a[i]; if(now<0)ans+=now,now=0;}很容易发现根据这一段代码可一个把数列分成很多个段,然后我的思路就开始出错了,我尝试用各种办法来维护段,但是每一种想法都会超时。后面我仔细想了想,发现如果从整体来看,结果就是一段前缀和,毕竟最后是要把每一段全部加起来。然

2021-08-11 14:56:54 98

原创 1560. Elementary Symmetric Functions

这是一道很有意思的题目。首先整体上看过去,有单点修改和区间查询的操作,所以基本可以确定用线段树来做。然后仔细观察一下,可以发现一个非常有意思的性质。我们考虑将两个区间合并,s[0/1][5]s[0/1][5]s[0/1][5]表示两个区间的S函数。如果在每一个区间都选择两个数,那么贡献值就是(∑l1<=x1<y1<=r1a[x1]∗a[y1])∗(∑l2<=x2<y2<=r2a[x2]∗a[y2])=s[0][2]∗s[1][2](\sum_{l_1<=x_

2021-08-05 10:19:02 155

原创 AtCoder Grand Contest 001

A很明显排个序就行了。#include<bits/stdc++.h>#define ll long long#define gc getchar#define pc putchar#define pii pair<int,int>#define mp make_pair#define fi first#define se second#define rep(i,x,y) for(int i=x;i<=y;i++)#define dwn(i,x,y) for

2021-04-23 13:05:08 129

原创 CF1470B Strange Definition

先把这个公式变形一下lcm(x,y)gcd(x,y)=xgcd(x,y)∗ygcd(x,y)\frac{lcm(x,y)}{gcd(x,y)}=\frac{x}{gcd(x,y)}*\frac{y}{gcd(x,y)}gcd(x,y)lcm(x,y)​=gcd(x,y)x​∗gcd(x,y)y​。然后我们可以发现右边两项是互质的,但是这两项的乘积是一个完全平方数,这说明这两项都是完全平方数,同时就可以知道x,y的每个质因子的幂奇偶性相同。当w=0,我们就可以试着把奇偶性相同的归为一个集合,所以只用求最大

2021-03-20 16:39:39 119

原创 CF1493E Enormous XOR

神奇的题目。。。首先很明显,如果l,r最高位不全是1,那么答案肯定每个数位都是1,如样例一对于其他的情况,我们尝试着把r中0的位置给变成1。我把二进制列出来以后,发现只有最低位置才有可能从0变成1(只要r-l>=2就可以)#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int n;char s1[N],s2[N];void add(){ s1[1]++; for(int i=1;i<=n

2021-03-20 14:50:11 163

原创 1495D BFS Trees

一道有趣的题目。因为n和m都很小,所以应该是枚举两个点来求方案数。我们先要bfs两次把每个点离i,j的的距离求出来,然后我们可以发现,对于一个点。然后利用转化思想,把两个点变成x和y坐标放到平面直角坐标系上面去。然后自己手玩一下最普遍的生成树,i和j之间有一段路径,这个路径的每个点都有一写子树。把这个图弄到坐标系上面去就是(个数):i处在5的位置,j处在E的位置,那一段1是他们之间的路径,然后?表示接在路径上面的点(因为个数不确定)。然后我们可以发现,路径上面只能是1,因此要特判这种情况。又很

2021-03-19 13:09:16 155

原创 洛谷P5385 [Cnoi2019]须臾幻境

一个挺有意思的题目。先把每一条边用编号当作边权,从第一条边开始扫描,用LCT维护当前的最大生成树。再用主席树记录删除的边即可。我在add函数写错了,调了好久。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define ll long longusing namespace std;template<

2021-02-24 21:50:48 180

原创 [USACO18FEB]New Barns P

题目的意思是让我们动态维护直径。很容易得到以下两个定理:1.两棵树合并以后的直径端点是原来两棵树的四个直径端点中的两个;2.距离一个点最远的点一定是一个直径的端点。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;template<typename T>inl

2021-02-23 17:19:17 160

原创 [TJOI2015]旅游

很容易想到要用动态树来维护。不过这一道题我被恶心了一下,主要是翻转操作会影响结果,所以应该同时维护从左到右和从右到左的结果。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;template<typename T>inline void qr(T &x){

2021-02-23 16:16:54 117

原创 P5489 EntropyIncreaser 与 动态图

题意:动态加边,求两点间割边和割点的个数。我们可以用LCT来做:对于割边,先是要以点代边,边权1,点权0,我们发现在一个环上的边全部都不是割边,所以如果添加的边的两个端点已经联通,我们就把路径上的全部点权值设置为0.对于割点,我们动态维护圆方树,如果加一条边就会形成和环,那么就把环完全断掉,把环上的每一个点(方点和圆点)全部连在一个新的方点上。可以发现原来环上的任意两个点之间的距离都是2,所以能够保证时间复杂度。查询就输出圆点个数。#include<cstdio>#include&lt

2021-02-22 12:47:42 359

原创 [NOI2014]魔法森林

把每条边的ai从小到大排序然后不断插入每一条边,然后就是要维护是的1到n的路径中最大的bi最小首先我们肯定是要把转化成一棵树的,对于新插入的一条边,如果两个点本来就不连通,那么就直接插入,如果联通那么插入以后就会形成一个换,我们只要再把换上的最大的边删掉,这个用动态树维护即可。对于细节的处理,可以采用以点代边的做法,即多开m个点表示边(编号为n+1~n+m),插入一条边就是连接(u,n+i)和(n+i,v),边权就放在表示边的点上。#include<cstdio>#include&lt

2020-12-25 12:45:21 148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除