题目 题目大意 给你一棵树,对于每一条边,求删去这条边之后,再用一条边(自己定)连接两个连通块,形成的树的直径最小是多少. 正解 首先,将这棵树的直径给找出来.显然,如果删去的边不在直径上,那么答案就是直径. 接下来考虑删去的边在直径上的情况. 自己连的边应该要是两棵树的直径的中点(中点就是直径上到端点最大距离最小的点). 答案就是两棵树的直径的一半(当然这是粗略的说法)加上边权,和两棵树内部的直径长度的最大值. 设直径端点为\(S\)和\(T\),现在想象直径是横过来的一条线,有一堆树挂在上面…
题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案数是(n-g[i]) 用线段树合并维护集合即可 code #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio>…
Description: 小 D 的家门口有一片果树林,果树上果实成熟了,小 D 想要摘下它们. 为了便于描述问题,我们假设小 D 的家在二维平面上的 (0, 0) 点,所有坐标范围的绝对值不超过 N 的整点坐标上都种着一棵果树.((0, 0) 这个点没有果树) 小 D 先站在 (0, 0) 处,正对着 (1, 0) 的方向. 每次摘果实时,小 D 会逆时针选择他能看到的第 K 棵还未摘取果实的果树,然后向着这个方向走去,在行走的过程中摘下沿路的所有的果树上的果树果实,直到走到果树林的边缘. 接…
题目描述 题解 吼题但题解怎么这么迷 考虑一种和题解不同的做法(理解) 先把僵尸离散化,h相同的钦(ying)点一个大小 (可以发现这样每种情况只会被算正好一次) 计算完全被占领的方案,然后1-方案/概率 由于大小确定了,所以最后会被分成若干不相连的块,且块中至少有一只僵尸,大的僵尸能占领小的僵尸的块,所以相邻两块之间一定会断开 那么一种占领的方案对应的是一类高度情况,考虑所有的占领方案即可求出所有的高度情况 定义一个块的编号为所占领的最大僵尸的编号 设f[i][x](x>0)表示以i为根的子树…
题目描述 题解 随便bb 详细题解见 https://www.cnblogs.com/coldchair/p/11624979.html https://blog.csdn.net/alan_cty/article/details/84557477 https://www.cnblogs.com/Iking123/p/11626041.html 这里讲讲自己发现的东西和一些细节 f[i][p][a]表示第i位以后(包括第i位)的最大值,a表示个位,在第i为进1的个位会变成什么 为什么要包括第i位…
题目 题目大意 给你一个由整点组成的矩形,坐标绝对值范围小于等于\(n\),你在\((0,0)\),一开始面向\((1,0)\),每次转到后面第\(k\)个你能看到的点,然后将这条线上的点全部标记删除. 问最后一个被标记删除的点的坐标. 正解 先吐槽一句,原来删除的点是一条线上的,而不是一个点-- 害得我以为是一道神题--更可恨的是,我看不出我的暴力有什么错! 既然一次删除的点是在一条线上的,那不妨将整条线上的东西看成一个点. 那就变成了一个约瑟夫问题(也就是猴子选大王). 共有\(8\sum_…
题目 题目大意 给你一个数列,每次可以选择任意两个相邻的数\(x\)和\(y\),将其删去,并在原来位置插入\(x+2y\). 每次询问一个区间,对这个区间进行上述操作.求最后剩下的数最大是多少. 答案需要取模. 思考历程 看到这题,第一个想法是:这题既要搞个最大值,又要取模,所以肯定是贪心. 然而不会-- \(O(n^3)\)的暴力是可以打的,直接区间\(DP\).然而我没有打. 其实最大的瓶颈是,我需要比大小,然而数太大,会炸掉-- 这题题面本身就对暴力不友好-- 正解 其实我比赛的时候就发…
题目 小W最近迷上了日本动漫,每天都有无数部动漫的更新等着他去看,所以他必须将所有的动漫排个顺序,当然,虽然有无数部动漫,但除了1号动漫,每部动漫都有且仅有一部动漫是它的前传(父亲),也就是说,所有的动漫形成一个树形结构.而动漫的顺序必须满足以下两个限制: 1.一部动漫的所有后继(子孙)都必须排在它的后面: 2.对于同一部动漫的续集(孩子),小W喜爱度高的须排在前面. 光排序小W还不爽,他想知道一共有多少种排序方案,并且输出它mod 10007的答案. 分析 这个题目有两个限制: 1.先父亲后儿…
题面 传送门 题解 首先,我们把串反过来,那么前缀就变成后缀,建一个\(SAM\).我们发现一个节点的后缀是它的所有祖先 那么我们是不是直接按着\(parent\)树建边就可以了呢? 显然不是.我们假设在\(SAM\)的某个节点上同时存在某个\(a_i\)和\(b_j\)且\(|b_j|>|a_i|\),\(b_j\)不是\(a_i\)的后缀,但它们仍然有边相连!(自己到自己就当有边吧--) 对于每一个节点,我们把处于这个节点中的所有串排个序,按长度为第一关键字,是否是\(B\)串为第二关键字.…
题目 题目大意 给你一棵树,带点权和边权. 要你选择一个联通子图,使得点权和乘最小边权最大. 支持修改点权操作. 思考历程 显然,最先想到的当然是重构树了-- 重构树就是在做最大生成树的时候,当两个联通块相连时,新增一个点,将两个联通块的根节点连上去. 这个新建的点上记录这条边的边权,那么以它为子树的答案就是子树的点权和乘上自己表示的这条边的边权. 然后题目就变成了一个似乎很经典的问题:给你\(a_i\)和\(b_i\),每次修改可以将区间内的\(a_i\)区间加,询问最大的\(a_ib_i\)…
题目描述 题解 qy的毒瘤题 CSP搞这种码农题当场手撕出题人 先按照边权从大到小建重构树,然后40%暴力修改+查找即可 100%可以定期重构+平衡规划,每次把B个询问拉出来建虚树,在虚树上暴力维护每一段的凸壳,在凸壳上二分 虚树建法: 按照dfs序排序,每次用栈维护从根到当前点的栈 每次把当前点和栈顶做lca,若lca=栈顶就直接加,否则一直弹到栈顶是lca的祖先,顺便记录下每个点在虚树上的父亲 如果栈顶=之前的lca就不用管,否则加上lca,修改最后弹出的点的父亲 (注意要把根加进去) 设每…
题目 题目大意 给你一串二元组\((a_i,b_i)\)的数列. 求最小的区间\([l,r]\)长度,满足\([l,r]\)中的每个二元组选或不选,使得\(\sum a_i=w\)且\(\sum b_i\leq k\) 思考历程 想了好久,想来想去都是一个背包-- 最终决定打暴力-- 正解 先说说GMH大爷的神奇解法. 首先是二分答案\(ans\),转化成判定问题.然后在数列中每\(ans\)个点设置一个观测点. 以每个观测点为中心,向左和向右背包,然后合并. 然而正解并不需要一个\(\log\…
题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往左第一个跳到的点,可以变成一棵树 如果r1r2(r1<r2)中间没有把两个点分开的弦,那么就是r1的深度 用一个单调栈可以求出往左跳到的点(每次把若干小区间合并),但是有可能一条弦跳到的位置会被向后的一条弦切断 所以再用一个单调栈求出每个右端点向左第一个跨过它的左端点,如果再维护过程中出现了交叉的情…
题目描述 Description Input 第一行两个个整数 n,k. 之后 n -1 行,第 i 行两个整数 ui, vi, 表示一条树边. 保证输入的数据构成一棵树. Output 一行一个数表示答案. Sample Input Sample Input1 3 2 1 2 1 3 Sample Input2 10 367305945 1 2 2 3 2 4 3 5 2 6 5 7 1 8 4 9 1 10 Sample Output Sample Output1 28 Explanatio…
题目 题目大意 有个二叉树,满足每个点跟它的所有祖先互质. 给出二叉树的中序遍历的点权,还原一种可能的方案. 思考历程 首先想到的当然是找到一个跟全部互质的点作为根,然后左右两边递归下去处理-- 然而考虑到和全部互质的点可能有很多个,这样的做法可能会退化到很多-- 先预处理了个\(L_i\)和\(R_i\)表示\(i\)左边第一个和\(i\)不互质的位置和右边第一个和\(i\)不互质的点. 这个东西怎么预处理就不用说吧-- (我估计正解肯定也要处理这东西) 然后就是乱搞-- 想不出正解,于是打了…
题目描述 题解 一种显然的水法:max(0,-(点权-边权之和*2)) 这样会挂是因为在中途体力值可能会更小,所以考虑求走完每棵子树所需的至少体力值 考虑从子树往上推求出当前点的答案 设每棵子树从根往下走的所需体力值为f,走完的贡献为sum 由于要加上 当前点-->儿子 这条边,所以实际上走完的贡献sum'=sum-边权*2 所需的体力值f'=max(边权+f,2*边权-sum),这里其实有两种情况 ①当前点-->儿子-->子树(-->儿子),那么最坏情况就是(子树的最坏情况+边权…
题目描述 题解 一种好想/好写/跑得比**记者还快的做法: 对所有询问排序,按照R递增的顺序来处理 维护每个点最后一次被覆盖的时间,显然当前右端点为R时的答案为所有时间≥L的点的权值之和 LCT随便覆盖一发,保证一段重链上的点的颜色相同(这样可以直接修改),用树状数组维护权值和 由于要保证颜色相同,所以不能随便moveroot 覆盖时先把x和y的lca和原树上的父亲断掉,把x-->lca这一段覆盖,然后再覆盖y-->lca向y方向的儿子 反正随便写应该就能过( 另一种做法 也就是题解的难想/难…
题目描述: \(1<=n,ai<=5*10^5\) 题解: 我是弱智我不会期望线性. 设\(E(a[i])\)表示第i个期望被减的个数. \(E(a[1])=a[1]\) 不难发现\(E(a[i])(i>1)\)之间互不影响,其实这很难. 考虑固定这两个,它们两个选到的概率一样,选到其它的就无视就好了. 那么只用考虑\(n=2\)的情况,这个直接暴力枚举\(a[1]\)结束时\(a[i]\)有几个,乘个\(1\over 2\)的几次方和组合数,式子如下: \(=a[i]-\sum_{i=…
题目 题目大意 给你一堆区间,将这些区间分成特定的几个集合,使得每个集合中的所有区间的并不为空. 求最大的每组区间的交的长度之和. 思考历程 一开始就认为这绝对是\(DP\)-- 试着找一些性质,结果找不出来-- 没办法,只能打个简单的状压\(DP\)-- 正解 首先有个很不显然的结论: 对于两个不重合的区间\(a\)和\(b\),如果它们互相包含(即\(l_a\leq l_b<r_b\leq r_a\)),那么一定满足: \(a\)和\(b\)同在一个组内. \(b\)在某个组内,而\(a\)…
题目 题目大意 给你一个区间\([l,r]\),求这个区间内每个整数的十进制上从高位到低位的逆序对个数之和. 思考历程 一开始就知道这是个数位DP-- 结果一直都没有调出来,心态崩了-- 正解 先讲讲我的SB做法. 先设\(f_i\)表示压着第\(i\)位(从低位到高位,从\(0\)开始)的贡献. 于是转移就是这样: 计算第\(i\)位的贡献.这一位的贡献可能有点难计算,所以我预处理了一个\(h_{i,j,0/1}\)表示是否压着\(i\)位,\(0\)到\(i\)位对\(j\)的贡献(\(j\…
题目 题目大意 有一个字符串\(p\).一开始字符串\(s\)为空串. 接下来进行若干次操作:在\(s\)的某个空隙中插入\(p\). 给出操作后的\(s\),问长度最小的\(p\). 思考历程 感觉是一道神仙题. 于是考虑暴力. 在\(s\)前面找连续的最长串,作为\(p\)的前缀.显然这个串中只出现过一次\(s_1\) 同样地,在后面也找一条,作为后缀. 将前缀出现的位置和后缀出现的位置标记一下. 统计每个字符出现的个数,求最大公因数\(g\),表明操作的次数为\(g\)的因数. 然后按照长…
题目 题目大意 给你一颗带点权的树,后面有许多个询问\((u,v)\),问: \[\sum_{i=0}^{k-1}dist(u,d_i) \ or \ a_{d_i}\] \(d\)为\(u\)到\(v\)路径上的点. 思考历程&正解 其实我只会我的方法--题解说得太简略了,集训队大佬Infleaking的方法完全听不懂-- 首先看到这道题,就立马觉得是神仙题. 但是想到既然是树题,那应该不会太难. 于是我开始试着\(LCT\)建立联系--但是发现这个操作真是太骚了,用\(splay\)真的不好…
题目 题目大意 给你个非负整数数列\(a\),每次等概率选择大于零的\(a_i\),使其减\(1\). 问\(a_1\)被减到\(0\)的时候期望经过多少次操作. 思考历程 对于这题的暴力做法,显然可以状态压缩吧-- 然后我突然意识到,实际上我们将题目转化成以下模型: 有\(n\)种颜色,第\(i\)种颜色的小球有\(a_i\)个.那么题目就变成了一个有重复元素的排列问题. 先将\(2\)到\(n\)排列求出来,然后考虑将\(1\)随机插入. 枚举最后一个\(1\)出现的位置,然后在前面用组合数…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 为了保护环境,p6pou建设了一个垃圾分类器. 垃圾分类器是一个树形结构,由 n 个垃圾桶和 n-1 条双向传送带组成. 垃圾处理器的编号为 1, 2, ..., n,每条传送带都可以花 1 秒钟将垃圾从一个垃圾桶输送到另一个垃圾桶. 垃圾投放点是编号为 r 的垃圾桶,垃圾总是投放在这里. 垃圾共有 n 种,编号也是 1, 2, ..., n. 编号为 i 的垃…
Description: 题解: 显然满足二分性. 并且每一条边要不选l要不选r. 二分的那条链肯定要选l. 考虑有两个人在走最短路,一个人一开始必须走二分的那条链,要求第一个人走的比第二个人快. 安排的话也比较简单,第一人先走到这条边就给l,第二个人就给r. 还有一种想法,先只给二分的链l,其它都给r,跑一遍最短路,设为dis1. 然后再从二分的链的结尾开始,每条边都设为l,跑最短路,dis2. 然后一个点x的dis2[x]+二分的链长<=dis1[x],那么就可以走这个点,否则不能走,最后看…
传送门. 题解: 我果然是不擅长分类讨论,心态被搞崩了. 注意到\(m<=n-2\),意味着除了1以外的位置不可能被加到a[1]两遍. 先考虑个大概: 考虑若存在\(x,x-1,-,2\)(有序)这样的,且1要么不出现,要么出现在2的左边,那么\(a[1]=\sum_{i=1}^x a[i]\). 同样,若存在\(y,y+1,-,n\),且1要么不出现,要么出现在n的左边,那么\(a[1]=a[1]+\sum_{i=y}^n a[i]\). 开始讨论: 1.1没有出现,直接枚举x,求出最大的y的…
题目 题目大意自己看题去-- 正解 比赛时在刚第二题,所以根本没有时间思考-- 模型可以转化为从\((x_1,x_2,..,x_n)\)出发到\((1,1)\)的方案数模\(2\). 方案数就用有重复的排列公式:\(\frac{(\sum{x_i})!}{\prod x_i!}\) 考虑它的奇偶性.显然可以将上面的\(2\)因子个数求出来,减去下面的个数,如果为\(0\)则是奇数. 这个东西也就是下面这条式子:\(\sum_{w=2^i} (\lfloor \frac{\sum_{x_i}}{w…
题目 题目大意 维护一个无向图的割边条数,支持加边和删边. 正解 (PS:这是我很久之前在OJ上打出来的题解,现在直接copy过来) 题解只有一句话,估计没多少人可以看得懂.感觉出题人偷懒不想写题解-- 刚了一个晚上终于理解了题解的做法-- 由于本人还没有AC(时间比较匆忙),所以只是在这里梳理一下思路,顺便造福一下人类. 首先都知道线段树分治是个什么意思吧? 线段树分治是一种有效地利用撤销操作替代删除操作的套路.在这题中,所有的加边删边操作变成了加边和撤销操作.可以把操作看成一个栈,加边的时候…
题目描述 “叮铃铃”上课了,同学们都及时到了教室坐到了座位上,教室里有n行m列的座位而且刚好坐满.既然是上课,那老师叫学生回答问题就是再正常不过的事了,同样地,教室里也就有爱学习和不爱学习的学生了,爱学习的学生对老师提的问题都知道,而不爱学习的学生却恰好相反,对老师提的问题都不知道.爱学习的同学对别人的求助都会热情地伸以援手. 小W也在这个教室上课,但是这个时候小W却很紧张,为什么呢,因为小W就是个不爱学习的学生,对老师提的问题一个都不知道,而且这个任课老师每节课上都点名,且每次点名都是随机的.…
题目描述 大家都知道,小W是一名大帅哥,当然比起Light还是有点儿差距的!帅气的小W认为0-9这些数字,只有1,3,5是完美的. 欲问小W为什么,小W总是说"帅哥,是不需要解释的".所以在帅哥小W的世界里,只有1,3,5这些数字或者是有1,3,5组合 而成的数字,比如13,35555等等. 那么现在问题来了,给你一个小W的世界里的数字,你能计算出它是第几小吗? 例如:1是第一小,3是第二小,(在小W的世界里是没有负数的,为什么呢?因为:帅哥,是不需要解释的) 输入 多组输入数据 对于…