[题目大意] 给你$n$个点,被一个半径为$R$的元圆划分成内(包含边界).外两个部分. 要连若干线,每个点只能连一条线,不存在重点和三点共线. 线只能连在内部点和外部点之间,线长度不超过$d$. 如果一个外部点$w$和三个内部点$x,y,z$距离都不超过$d$,且两个内部点$x,z$没有和外部点$w$连线,我们准备从外部点$w$连到内部点$y$.那么如果$x$和$z$的连线有和$w$和$y$的连线相交,那么是不合法的. 求合法情况下,最多连多少线.以及方案. $1 \leq n \leq 10…
[题目大意] 给出$\{P_i\}$,求经过以下操作后能够得到的不同序列个数: 第一步,选择$i, j$,交换$P_i,P_j$:第二步,把所有$P_x=i$的$P_x$变为$j$,把所有$P_x=j$的$P_x$变为$i$. $n \leq 10^5$ [题解] 显然就是求 给出一个基环内向森林,求交换编号后,不同构的个数. 考虑什么时候会发生同构的情况. 容易发现,每当出现k个子树相同,或k个环套树相同,就有 k! 种同构方案. 那么我们只需要做一遍树哈希.环套树哈希(可以用最小表示法,或者…
[题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T \leq 10^2$ [题解] 考虑50%的数据,暴力线性基即可. 这样的复杂度是$O(T(R-L)logn)$ 观察到数据比较特殊,是连续的一段正整数,我们写完线性基暴力然后打个表观察数在什么时候被插入到线性基里. 我们以[23333, 66666]为例: 首先L=23333,这个数一定被插入到线…
[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. $1 \leq T \leq 10^5, 1 \leq n \leq 10^7, 1\leq k \leq 10^9$ [题解] 显然引号序列可以看做括号序列,于是我们有了一个$O(n^2)$的dp了. 设$f_{i,j}$表示到第$i$个位置,前面有$j$个左引号没有匹配,的方案数 每次,要么有…
原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 |区间交| 的乘积最大. $1\leq n,L_i,R_i\leq 10^6$ [题解] 把区间去掉包含情况,然后进行排序,变成$l_i$和$r_i$都递增的数列. 然后容易发现取得区间一定是连续的一段. 然后我们推一推决策单调性. 容易得出当$j$优于$k$的情况: $r_i * (r_j - r_…
[题目大意] 有$n$天,每天能吃饭.睡觉.什么事也不干 每天吃饭的愉悦值为$e_i$,睡觉的愉悦值为$s_i$,什么都不干愉悦值为0. 要求每连续$k$天都要有至少$E$天吃饭,$S$天睡觉. 求最大愉悦值. $k \leq n \leq 1000, 0\leq s_i, e_i \leq 10^9, 0 \leq E+S \leq k$ [题解] 首先什么都不干这个是xjb写的肯定没有用.. 然后我们考虑费用流,我钦定n天都睡觉,那么假设有一天吃饭,那么我们换成吃饭的费用就是$e_i-s_i…
[题目大意] 有$n$个位置,每个位置有一个数$x_i$,代表从$i$经过1步可以到达的点在$[\max(1, i-x_i), \min(i+x_i, n)]$中. 定义$(i,j)$的距离表示从$i$到$j$经过多少步,从$j$到$i$经过多少步,这两个取最小值. 求任意两点间最大的距离. $1\leq n \leq 10^5, 1 \leq x_i < n$ [题解] 每个点经过若干次能过到达的,显然是一个区间. 考虑倍增,$[L_{x,i}, R_{x,i}]$表示从$x$开始,经过$2^…
[题目大意] 给出一棵带权树,有两类点,一类黑点,一类白点. 求切断黑点和白点间路径的最小代价. $n \leq 10^5$ [题解] 直接最小割能过..但是树形dp明显更好写 设$f_{x,0/1/2}$表示$x$这个点的子树中,0表示没有带颜色的点连到这个子树的根$x$,1表示黑点连到$x$,2表示白点连到$x$. 直接转移即可.具体看代码,挺好推得.. # include <stdio.h> # include <string.h> # include <iostrea…
[题目大意] 给出一个$n$个数的序列$\{a_n\}$,其中有些地方的数为0,要求你把这个序列填成一个1到$n$的排列,使得: $(a_i, a_j) = 1$,当且仅当$(i, j) = 1$.多组数据. $n \leq 3\times 10^5, T\leq 10$ CodeForces:无多组数据,$n \leq 10^6$ [题解] 这题有点神奇啊.. 首先考虑序列全是0要怎么做. 考虑到如果两个数的位置含有的因数种类完全一样,那么它们是可以互换的.(这个挺显然的) 观察如果两个质数的…
[题目大意] 给出平面上$n$个点,求一条连接$n$个点的不相交的路径,使得转换的方向符合所给长度为$n-2$的字符串. $n \leq 5000$ [题解] 考虑取凸包上一点,然后如果下一个是‘R',也就是向右转,那么就连到最左的点,这样下一次无论连到哪里都是向右:如果是'L',同理. 由于每次都是一个半平面,所以不会相交. # include <stdio.h> # include <string.h> # include <iostream> # include…
[题目大意] 定义times(a, b)表示用辗转相除计算a和b的最大公约数所需步骤. 那么有: 1. times(a, b) = times(b, a) 2. times(a, 0) = 0 3. times(a, b) = times(b, a mod b) + 1 对于$1 \leq x \leq A, 1 \leq y \leq B$,求times(A, B)的最大值,以及有多少对数取到了最大值. 多组数据. $T \leq 3 \times 10^5, 1 \leq A,B \leq…
[题目大意] 有$n$个人,每个人有一个初始位置$x_i$和一个速度$v_i$,你需要选择若干个人来感染一个傻逼病毒. 当两个人相遇(可以是正面和背面),傻逼病毒会传染,求经过无限大时间后,传染完所有人的方案数. [题解] 考虑经过无限大时间后结束的数列,一定是按$v_i$排序的. 对于第i个人,如果他带有病毒,那么 原来在它左边的速度最大的点一定会超过它,到达右边能到达的最大值,这个点会经过若干个点,这些都会被传染. 原来在它右边的速度最小的点一定会跑到它的后面,到达左边能到达的最小值,同理也…
[题目大意] 有n个岛屿,第i个岛屿有有向发射站到第$p_i$个岛屿,改变到任意其他岛屿需要花费$c_i$的代价,求使得所有岛屿直接或间接联通的最小代价. $1 \leq n \leq 10^5, 1 \leq p_i,c_i \leq 10^9$ [题解] 显然最后是个大环,特判原来就是大环的情况. 考虑每个连通块最多保留多少. 树的答案可以直接dp做出来. 环的答案,根据树的答案dp出来. h[x][0/1]表示当前做到环上第i个点,环是否被切断了,的最大保留价值. 因为环必须被切断一次.所…
[题目大意] $1 \leq n,m \leq 400$ N字形表示:上图第1行第1个那种:Z字形表示上图第1行第2个那种. [题解] 很容易得到结论: 考虑如果紫色比绿色先消去,那么黄色一定会比对应的白色先消去(这样才能消去白色). 然后我们可以知道,设取走$(x, y)$靠左的正方形,要$L(x,y)$步,那么$L(x,y) \geq L(x,y-1)$,同理也有$L(x, y) \geq L(x, y+1)$. 然后我们对于这个就可以进行一行一行的dfs了,dfs的时候可能会搜到原来已经搜…
[题目大意] 给一个n个数的序列,q次操作,每次选择区间$[l,r]$,给出数p,对于区间$[l,r]$的每个数$x$,做如下操作: 如果$x > p$,就交换$x$和$p$.求每次操作后$p$的值. $1\leq n\leq 4\times 10^5, 1\leq q \leq 25000$ [题解] 这个q的范围就提示我们可以用根号算法了(逃) 由于有一个性质,p最后一定是变成[l,r]区间内最大的那个数,可是还要修改,所以我们需要分块. 我们对于区间分块,然后对于每个块维护一个堆存储元素,…
[题目大意] 给出$n$个三维向量,设当前向量长度为$L$,每次沿着向量等概率走$[0,L]$个长度.一个球每秒半径增加1个长度,直到覆盖位置,每秒耗能为球体积,求总耗能的期望. 设最后半径为R,那么求得就是$ \int_0^R \frac{4}{3}\pi x^3\, dx.$的期望. $1 \leq n \leq 3000$ [题解] 也就是求$E(\frac{\pi}{3}R^4)$,问题在于怎么求$E(R^4)$. 先提供一种错误做法及其实现: 我们设向量为$\{p_n\}$,设$x_i…
[题目大意] 给出一个n重循环,每重循环有范围$[l, r]$,其中$l$,$r$可能是之前的变量,也可能是常数.求循环最底层被执行了多少次. 其中,保证每个循环的$l$,$r$最多有一个是之前的变量.设所有常数最大值为C. $1 \leq n \leq 26, 1\leq C \leq 10^5$ [题解] 发现构成了一个森林. 树形dp,稍微推一些循环交换顺序等等的性质,然后乘在一起就行了. 大概设f[x,i]表示到了x这个点,x的取值为i,x的子树的执行次数. 转移用个前缀和优化即可.复杂…
[题目大意] 有一棵n个点的完全二叉树,边权均为1,每个点有小鸟容量c[i] 依次来了m只小鸟,第i只小鸟初始位置在pos[i]上,问来了x只小鸟的时候,怎样安排小鸟的路线可以使得小鸟移动的边权和最小,且每个点的小鸟个数不超过小鸟容量.n,m<=3*10^5 [题解] 一眼看过去费用流 有两种方法 1. 我们对每次来小鸟都新建二分图,S->小鸟容量剩余的点,小鸟容量不够的点->T,互相连边即可. 复杂度O(n^3 + n * MinCostFlow) 2. 我们对于整棵树建一张图,每次相…
[题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点,2个已经有1个度,右边有j个点的方案数 g[i,j] g[i,j] = f[i-2,j-1]*j + g[j,i-2]*P(j,2) f[i,j] = g[i,j-1] * C(i,2) = g[j,i-1] * C(j,2) g[j,i-2] = g[i-1,j-1] * C(i-1,2) / C(j,…
[题目大意] 给出一棵树,求有多少对点(u,v)满足其路径上不存在两个点a,b满足(a,b)=1 n<=10^5 [题解] 考虑找出所有不符合的点对,共有n*ln(n)对,他们要么是祖先->儿子边,要么是不是. 考虑祖先->儿子边,那么一个点在祖先以上,一个点在儿子以下的点对全部无法访问. 考虑另外一种边,就是LCA不是两个端点的,这就比较好统计了,两个点在这两棵子树的点对无法访问. 考虑用DFS序,这样子树就是连续的一段(祖先以上是连续两段) 然后就是一个二维覆盖问题,用扫描线+线段树…
[题目大意] 给出n个数,a[1]...a[n],称作集合S,求…
[题目大意] 给出n个字符串,求有多少组字符串之间编辑距离为1~8. n<=200,∑|S| <= 10^6 [题解] 首先找编辑距离有一个n^2的dp,由于发现只找小于等于8的,所以搜旁边16个状态即可. 复杂度O(n^2|S| * 16) # include <vector> # include <stdio.h> # include <iostream> # include <string.h> # include <algorith…
题目描述 Miranda 准备去市里最有名的珠宝展览会,展览会有可以购买珠宝,但可惜的是只能现金支付,Miranda 十分纠结究竟要带多少的现金,假如现金带多了,就会比较危险,假如带少了,看到想买的右买不到.展览中总共有 N 种珠宝,每种珠宝都只有一个,对于第 i种珠宝,它的售价为 Ci​ 万元,对 Miranda 的吸引力为 Vi​.Miranda 总共可以从银行中取出 K 万元,现在她想知道,假如她最终带了 i 万元去展览会,她能买到的珠宝对她的吸引力最大可以是多少? 题解 菜死了菜死了..…
填坑填坑.. 感谢wwt耐心讲解啊.. 如果要看这篇题解建议从上往下读不要跳哦.. 30pts 把$A$和$C$看成$n$个$n$维向量,那$A_i$是否加入到$C_j$中就可以用$B_{i,j}$表示了 枚举矩阵$A$,求出它的秩$r$,如果$C$在$A$的线性空间内则$C$可以被$A$表示出来 那么$B$矩阵的方案数就是$(2^{n-r})^n$ 这时候我们可以发现,由于枚举$A$覆盖了所有情况,秩相同的$C$的答案都是一样的 然后就可以打表算答案了.. 60pts 如果不想看可以跳过这段…
题意 题目链接 分析 注意到本题的 \(C\) 很小,考虑定义一个和 \(C\) 有关的状态. 记 \(f(x,j)\) 表示考虑到了价格为 \(x\) 的物品,一共花费了 \(j\) 元的最大收益.将价格为 \(x\) 的物品按照收益从大到小排序,记这个数组为 \(w\) ,不难发现我们选择的一定是 \(w\) 的一段前缀的形式. 将所有的 \(j\) 按照模 \(x\) 的余数分类,容易得到: \(f(x,i)=\max\limits_{j\%x=i\%x}\{f(x-1,j)+w(\fra…
题面 传送门 题解 要不是因为数组版的\(LCT\)跑得实在太慢我至于去学指针版的么--而且指针版的完全看不懂啊-- 首先有两个结论 1.与一个点距离最大的点为任意一条直径的两个端点之一 2.两棵树之间连一条边新树直径的端点一定是第一棵树直径的两个端点和第二颗树直径的两个端点这四个点之二 然后用并查集维护联通块的直径就行了.注意因为这里强制在线,所以得用\(LCT\)来维护距离 并不建议看代码因为这个代码非常难懂哪怕我加满注释您都不一定看得懂 //minamoto #include<bits/s…
题目描述 给你 $n$ 个点,支持 $m$ 次操作,每次为以下两种:连一条边,保证连完后是一棵树/森林:询问一个点能到达的最远的点与该点的距离.强制在线. $n\le 3\times 10^5$ ,$m\le 5\times 10^5$ . 题解 树的直径+并查集+LCT 与直径相关的结论1:与一个点距离最大的点为任意一条直径的两个端点之一. 与直径相关的结论2:两棵树之间连一条边,新树直径的两个端点一定为第一棵树直径的两个端点和第二棵树直径的两个端点这四者中之二. 于是问题就变简单了,用并查集…
题目描述 Miranda 生活的城市有 \(N\) 个小镇,一开始小镇间没有任何道路连接.随着经济发现,小镇之间陆续建起了一些双向的道路但是由于经济不太发达,在建设过程中,会保证对于任意两个小镇,最多有一条路径能互相到达.有的时候 Miranda 会从某个小镇开始进行徒步旅行,每次出发前,她都想选择一个她能到达的最远的小镇作为终点,并且她在行走过程中是不会走回头路的,为了估算这次旅行的时间,她会需要你告诉她这次旅行的时间会是多少呢?可以假设通过每条道路都需要单位时间,并且 Miranda 不会在…
https://loj.ac/problem/6039 我们设dp[i][j]表示考虑所有价值小于等于i的物品,带了j块钱的最大吸引力. 对于ci相同的物品,我们一定是从大到小选k个物品,又发现最大的k个的价值在k变大的时候增长率是单调减的. 同时对于同样的ci,被转移和转移到的状态mod ci同余. 这些dp值也具有单调性,因此这个dp具有决策单调性. 我们用分治优化转移.负责度O(c*k*logk) #include<iostream> #include<cstring> #i…
给你 n 个点,支持 m 次操作,每次为以下两种:连一条边,保证连完后是一棵树/森林:询问一个点能到达的最远的点与该点的距离.强制在线. n≤3×10^5 n≤3×10^5 ,m≤5×10^5 m≤5×10^5 . 我们知道与一个点距离最大的点为任意一个直径的两个端点之一. 两棵树之间连一条边,新树直径的两个端点一定为第一棵树直径的两个端点和第二棵树直径的两个端点这四者中之二. 于是我们可以用lct和并查集来维护树的直径的两个端点. #include<iostream> #include<…