随笔分类 - OJ—bzoj
摘要:2460: [BeiJing2011]元素 链接 分析: 贪心的想:首先按权值排序,然后从大到小依次放,能放则放。然后用线性基维护是否合法。 代码:
阅读全文
摘要:E. Cool Slogans 链接 题意: 给定一个字符串S,从中选出k个子串a[1],a[2]...a[k],满足a[i]在a[i+1]中出现了两次(可以重叠),求最大的k。 分析: 建出SAM,在parent树上dp,dp[i]表示到第i个点,最多选了多少个子串,那么如果fa[i]在i中出现了
阅读全文
摘要:4516: [Sdoi2016]生成魔咒 链接 题意: 求本质不同的子串。 分析: 后缀数组或者SAM都可以。 考虑SAM中每个点的可以表示的子串是一个区间min(S)~max(S),把每个点的这个区间加起来即可。 字符集有点大,可以用map。 代码:
阅读全文
摘要:2555: SubString 链接 题意: 动态在末尾加入一个字符串,询问一个字符串出现了多少次。 分析: 如果没有动态加入,那么建出SAM后,求出parent树上,每个点|Right|,然后走一遍找到对应的点,这个点的Right集合的大小就是答案。 求Right可以从叶子结点往上走一遍。 考虑动
阅读全文
摘要:5249: [2018多省省队联测]IIIDX 链接 分析: 贪心。 将给定的权值从大到小排序,从第一个往后挨个赋值,考虑第i个位置可以赋值那些树。首先满足前面必须至少有siz[i]个权值没选,如果存在相同的数,尽量往后选。 那么可以给每个权值记录一个值F[i],表示i左边可以选多少个权值了。还要和
阅读全文
摘要:4011: [HNOI2015]落忆枫音 链接 分析: 原来是一个DAG,考虑如何构造树形图,显然可以给每个点找一个父节点,所以树形图的个数就是$\prod\limits_u deg[u]$。 那么加入一条边后,我们依然可以按照上面的公式求出一个值T,然后减去不合法的,即存在环的。 那么这个环就是X
阅读全文
摘要:4013: [HNOI2015]实验比较 链接 分析: 首先把等号用并查集合并起来。 由于只存在最多一个质量不比i差的数,发现这是森林。若x<y,连边x->y。于是建虚拟根节点0。 然后树形dp,f[i][j]表示第i棵子树内,分成了j段的方案数,即存在j-1个小于号。 依次合并每个子树,假设一棵树
阅读全文
摘要:4008: [HNOI2015]亚瑟王 链接 分析: 根据期望的线性性,直接求出每张牌出现的概率,最后乘以攻击力就是答案。 每张牌出现的概率只与它前面的牌有关,与后面的没有关系,于是按顺序考虑每张牌。 $f[i][j]$表示到第i张牌,还剩j次出牌的机会(即轮数)的概率,那么有$f[0][r] =
阅读全文
摘要:3832: [Poi2014]Rally 链接 分析: 首先可以考虑删除掉一个点后,计算最长路。 设$f[i]$表示从起点到i的最长路,$g[i]$表示从i出发到终点的最长路。那么经过一条边的最长路就是$f[u]+1+g[v]$。 删除一个点x后,会使一些路径没了。考虑这些路径的特点。我们它比x拓扑
阅读全文
摘要:3532: [Sdoi2014]Lis 链接 分析: 首先dp一遍,求出f[i],表示第i个位置在最长上升子序列中的最优排在什么位置。 然后建图,求最小割,可以求得第一问。S->i,容量INF;i->i+n,容量B[i];i+n->T,容量INF。 对于求字典序最小的最小割,那么首先按C排序,依次判
阅读全文
摘要:2597: [Wc2007]剪刀石头布 链接 分析: 费用流。 首先转化一下问题,整张图最优的情况是存在$C_n^3$个,即任意3个都行,然后考虑去掉最少不满足的三元环。 如果u赢了v,u向v连一条边,如果v有k条入边,那么说明少了$C_k^2$个三元环,所对每场比赛分配度数,求最小费用最大流。 具
阅读全文
摘要:3504: [Cqoi2014]危桥 链接 分析: 首先往返的可以转化为全是“往”,那么只要将容量除以2即可。 然后S向a1连边容量为an(除以2之前为2*an),S向a2连边容量为an,b1,b2向T连边容量为bn。原图上的边,建双向边保存。 这样会存在从a1流向b2的流量,当然也有b1流向a2的
阅读全文
摘要:2069: [POI2004]ZAW 链接 题意: 给定一张带权图(边是双向的,但不同方向长度不同)。求从1出发,至少经过除1外的一个点,再回到1的最短路。点和边不能重复经过。 n≤5000,m≤10000 分析: 因为不能重复经过,不能直接最短路的,考虑去掉不能重复经过一个点的限制。 可以枚举所有
阅读全文
摘要:2653: middle 链接 分析: 二分答案+主席树。 对于中位数的经典做法,就是二分一个数,将小于的变成-1,大于等于的变成+1,那么如果sum>=0(因为+1包括等于),L=mid+1,否则R=mid-1。 那么考虑二分一个中位数(当然只二分出现过的数即可),然后向上面一样判断。 因为二分的
阅读全文
摘要:4320: ShangHai2006 Homework 链接 分析: 分块。对权值模数进行分块,模数小于$\sqrt V$的($V$为权值上界),暴力处理。 模数大于$\sqrt V$的,设模数是k,枚举k的倍数,然后查询大于[k,2k]之间的最小的数x,这个区间的mod k最小的数就是x-k。k的
阅读全文
摘要:1483: [HNOI2009]梦幻布丁 链接 分析: 启发式合并+链表。 代码:
阅读全文
摘要:3495: PA2010 Riddle 链接 分析: 每个点要么建首都,要么不建,并且一个点建了,会导致一些点不能建。所以可以考虑2-sat。 但是如果在每个郡里两两连边,边数是n^2的。 考虑用前缀优化。 S[i]表示对于当前郡,前i个点中是否存在一个首都,A[i]表示i这个点是否建首都。 1、那
阅读全文
摘要:1997: [Hnoi2010]Planar 链接 分析: 首先在给定的那个环上考虑进行操作,如果环内有有两条边相交,那么可以把其中的一条放到环的外面去。所以转换为2-sat问题。 像这样,由于1-4和2-3在环内相交了,所以可以把1-4放到环外,就变成了下图。 代码:
阅读全文
摘要:3653: 谈笑风生 链接 分析: $ans = min(deep[x] - 1, k) * siz[x] - 1 +\sum\limits_{y是u子树内的点}(siz[y] - 1)$ 前面的可以$O(1)$算,后面的那一部分可以dfs序+主席树维护。 或者dfs的过程中+线段树合并。或者长链剖
阅读全文
摘要:4543: [POI2014]Hotel加强版 链接 分析: f[u][i]表示子树u内,距离u为i的点的个数,g[u][i]表示在子树u内,已经选了两个深度一样的点,还需要在距离u为i的一个点作为第三个点。 然后就可以利用这两个数组统计答案了。 ans+=g[u][j]*f[v][j-1]+f[u
阅读全文

浙公网安备 33010602011771号