- 博客(1165)
- 收藏
- 关注
原创 [BZOJ3729]Gty的游戏(dfs序+splay)
题目描述传送门题目大意:给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问将某个节点的子树中的石子移动到这个节点先手是否有必胜策略。支持几种操作:1 x询问将x的子树中的石子移动到这个节点先手是否有必胜策略;2 x y将节点x上的石子修改为y;3 x y z在节点x上连接一个节点y(x为y的父亲),石子数为z。强制在线。题解首先考虑静态的树。对于单个点来说,其实是一个巴什
2017-04-17 20:00:07 596
原创 [BZOJ3786]星系探索(dfs序+splay)
题目描述传送门题目大意:给出一棵树,支持几个操作:Q x询问点x到根的路径上的点的权值和;C x y将以x为根的子树接到y上;F x y以x为根的子树中的每个点的权值加y题解这题卡数组…必须写结构体或者指针的splay才能过 首先将这棵树按照dfs序展开,对于每一个点维护一个入栈点和一个出栈点,入栈点的权值为点权,出栈点的权值为点权的相反数 用splay来维护这个dfs序列,对于Q操作,其实就是
2017-04-17 17:30:32 503
原创 [BZOJ1737][Usaco2005 jan]Naptime 午睡时间(dp)
题目描述传送门题目大意:给出一个n个数的数列,从中选出m个数,要求选的每一段连续的区间中第一个数都没有贡献,求最大值。题解f(i,j,0/1/2,0/1/2)表示选了i个数,选到第j个数,第j个数不选/选了不算贡献/选了算贡献,第一个数不选/选了不算贡献/选了算贡献的最大值 目标状态只有f(m,n,0,2)是不合法的 加一个滚动数组优化代码#include<algorithm>#include
2017-04-17 10:58:20 668
原创 [BZOJ4698][Sdoi2008]Sandy的卡片(后缀数组+st表||后缀自动机)
题目描述传送门题目大意:给出n个长度为mi的串,求趋势相同的最长公共子串题解将前后两个数差分之后就是一个裸的最长公共子串问题了 将所有的串怼在一起求sa和height,然后用一个指针扫出来至少含有n个串的代码#include#include#include#include#includeusing namespace std;#define N 20000
2017-04-16 21:44:23 792
原创 [BZOJ4006][JLOI2015]管道连接(斯坦纳树+dp)
题目描述传送门题目大意:给出一个n个点m条边的无向图,给出p个关键点,每一个点有一个编号,求一个最小的权值子图,使编号相同的关键点都连通。题解首先用斯坦纳树求出来f(i,s)表示和点i连通的关键点的状态为s的最小值 然后再dp一下,g(s)表示选出的关键点状态为s的最小值,然后将s搞成两个划分t和s-t然后check一下这两个状态里不能有编号相同的点就行了 爆搜也可以吧。。。有点麻烦代码#inc
2017-04-16 15:57:56 587
原创 [HDU4085]Peach Blossom Spring(斯坦纳树+dfs)
题目描述传送门题目大意:给出一个n个点m条边的无向图,要求前k个点和后k个点两两配对(配对即要求连通)的最小权值子图。题解首先用斯坦纳树求出来f(i,s)表示和点i连通的关键点的状态为s的最小权值 但是接下来只需要两两配对就可以,不一定所有的关键点都连通 这一步我的做法比较蠢,就是直接爆搜。。暴力将k个点匹配+分组 实际上这一步还可以写一个dp,g(s)表示关键点状态为s的最小权值,同样是枚举
2017-04-16 15:53:20 631
原创 [BZOJ2595][Wc2008]游览计划(斯坦纳树)
题目描述传送门题目大意:给出一个n*m的网格,有一些位置是0,每一个位置有一个权值,求一种最小的权值覆盖,使任意两个0的位置都连通。输出方案。题解f(i,j,s)表示和第(i,j)个方格连通的关键方格状态为s的最小价值 那么有两种转移: f(i,j,s)=min{f(i,j,s-t)+f(i,j,t)-a(i,j)} f(i,j,s)=min{f(k,l,s)+a(i,j)} 第一种转移实际
2017-04-16 15:48:46 1038
原创 [BZOJ1211][HNOI2004]树的计数(prufer序列+数学相关)
题目描述传送门题解树的prufer序列裸题 答案应该是(n−2)!∏i(di−1)!(n-2)!\over \prod_i (d_i-1)!,相当于是一个有重复元素的排列问题 但是我被无解的情况坑了挺久的…其实也不难 特判n=1的情况;∑di=n−2\sum d_i=n-2;di≥1d_i\ge 1代码#include<algorithm>#include<iostream>#includ
2017-04-16 09:21:32 544
原创 [BZOJ1430]小猴打架(prufer序列+数学相关)
题目描述传送门题解这道题可以利用树的prufer序列来做 首先,一个长度为n-2的prufer序列对应了唯一的一个n个节点的生成树,这n-2个位置可以是1~n中的任意一个数,所以一共有nn−2n^{n-2}种 而对于一个生成树一共有n−1n-1条树边,不同的连接方式一共有(n−1)!(n-1)!种 所以最终的答案即为nn−2×(n−1)!n^{n-2}\times (n-1)!代码#inclu
2017-04-16 09:00:35 621
原创 [BZOJ2095][Poi2010]Bridges(二分+最大流+欧拉图)
题目描述传送门题目大意:n个点m条边的无向图,每一条边正向走和反向走的价值是不同的。求图中的一个欧拉回路,并且走的价值的最大值最小。题解很容易想到二分答案,关键是怎么判定 判断欧拉回路的条件有两个:①整个图强连通②每个点的入度=出度 首先如果图中的某一条边断掉了那么无解 然后能走的边有一些是有向边,有一些是无向边,这就是一个混合图的欧拉回路判定问题 首先将每一条无向边随便规定一个方向,求出每
2017-04-14 08:46:50 614
原创 [HDU1038]Ant Trip(并查集+欧拉图)
题目描述传送门题目大意:给出一个n个点m条边的无向图,问最少用多少条路径能覆盖每一条边恰好一次。题解用并查集维护出每一个连通块,然后统计每一个连通块内有多少个奇点,对答案的贡献应该为max(x/2,1) 需要注意的一点是如果有一个点自己是一个连通块的话对答案的贡献应该为0代码#include<algorithm>#include<iostream>#include<cstring>#incl
2017-04-13 21:32:18 661
原创 [BZOJ3706]反色刷(并查集+欧拉图)
题目描述传送门题解欧拉回路,比较显然的一点是有解的充要条件是没有奇点 刚开始一直在往维护黑边的连通块个数的方面考虑,然后就一直在想什么写个lct啊… 但实际上这样做是有一点问题的,因为白边不一定不走只要走偶数次就可以 那么可以将一条白边看成两条黑边,这样的话对每个点的奇偶性是没有影响的,而且同样是求欧拉回路 用并查集先维护出连通块了之后,只需要记录一下每一个连通块是否有黑边,如果有黑边的话就
2017-04-13 21:05:18 875
原创 [BZOJ3033]太鼓达人(欧拉图+dfs)
题目描述传送门题解这道题实际上是将k-1位的二进制数看做点,k位的二进制数看成边,并且连接两个点的边就是将这两个点的权怼起来 像这样 然后每个点的入度和出度相等并且全部是偶点,是一个标准的欧拉图,所以只需要在这个图中找字典序最小的欧拉回路就行了 可以贪心地找字典序较小的边,然后实在不行了就回溯 这样的话时间复杂度我不大会…不过实测了一下是接近O(n+m)O(n+m)的吧代码#includ
2017-04-13 17:23:10 2330 1
原创 [BZOJ1975][Sdoi2010]魔法猪学院(k短路)
题目描述传送门题解这道题实际上就是要求出最短路、次短路…看能够承受多少 用A*算法找k短路即可代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 5003#define E
2017-04-13 08:04:21 652
原创 [BZOJ1598][Usaco2008 Mar]牛跑步(k短路)
题目描述传送门题解k短路A*算法模板题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 10005#define LL long longint n,m,k,s,t;in
2017-04-13 08:02:29 958 1
原创 HDU&POJ训练记录3 二分图KM算法
1、奔小康赚大钱传送门题意简述两两匹配有一个权值,求最大权匹配。数据范围1≤n≤3001\le n\le 300题解KM裸题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 305const int inf
2017-04-12 21:34:30 577
原创 [BZOJ1937][Shoi2004]Mst 最小生成树(KM)
题目描述传送门题解刚开始看到这道题是没大有思路的 首先将树边和非树边分开,每一条边看做一个点,然后枚举每一条树边,将树边的两个端点所确定的树链上所有大于这条非树边的边全部连向这条非树边,权值为边权的差值,然后做二分图的最大权值匹配 想出来这个做法了之后不会非常严格的证明,但是感觉首先每一条边只会被修改一次,并且能匹配的两条边任意修改一个就可以,然后只要修改掉一个最大的就行了,所以认为是对的 但
2017-04-12 20:35:33 732
原创 SDOI2017 Round1 解题报告
Day1A product题意简述定义f(0)=0,f(1)=1,f(n)=f(n−1)+f(n−2)(n≥2)f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n\ge 2) 求∏i=1n∏j=1mf(gcd(i,j))\prod\limits_{i=1}^n\prod\limits_{j=1}^m f(gcd(i,j)) 多组数据,对109+710^9+7取模数据范围对10%
2017-04-12 07:43:21 1195
原创 SDOI2017 Round1 续命记
Hope is a good thing. Maybe the best of things. And no good things ever dies.
2017-04-12 07:41:24 1439
原创 [BZOJ4430][Nwerc2015]Guessing Camels赌骆驼(cdq分治+bit||bit)
题目描述传送门题目大意:给出三个1~n的排列,求有多少个数对,在这三个排列中的相对位置相同。题解处理出每一个数在三个排列中的位置,就形成了n个三维点对 然后就是一个三维偏序问题了,用cdq分治+bit求解做完之后发现有一个更厉害的只用bit的方法 考虑容斥,答案=总数-不符合条件的对数 然后又知道不符合条件的点对一定是在两个排列里相对位置相同,在一个中和另外两个不同,那么两两统计三个排列,相当
2017-04-06 19:28:02 751
原创 [BZOJ1123][POI2008]BLO(tarjan求点双+树形dp)
题目描述传送门 题目大意:给出一个n个点m条边的无向连通图,问去掉每一个点之后存在多少点对不连通。题解tarjan求点双联通分量,对于每一个点双建立一个虚拟的节点,然后将这个点双的所有节点都连接到这个节点上,这样就形成了一棵树的结构 容易知道这道题求的应该是去掉每一个点之后形成的联通块的每一个大小,然后利用乘法原理计算一下,所以建出树了之后dp一下就行了代码#include<algorithm>
2017-04-06 15:40:13 781
原创 [BZOJ2285][Sdoi2011]保密(01分数规划+最小割)
题目描述传送门题解首先求出来n到1~n1的最短路,这个需要用到01分数规划 首先二分答案mid,那么假设∑ai∑bi≤mid{\sum a_i\over \sum b_i}\le mid,也就是当∑ai−∑bi∗mid≤0\sum a_i-\sum b_i*mid\le 0的时候说明还存在更优的答案 那么将每一条边的边权变成a-b*mid,然后spfa判断是否有负权的路径就行了 注意这里spf
2017-04-06 07:22:59 861
原创 [BZOJ2555]SubString(后缀自动机+lct)
题目描述传送门题解询问每一个字符串出现过几次,实际上就是将这个字符串在后缀自动机上匹配,然后查询最终匹配到的那个点的right集合的大小 又因为是在线的,pre指针经常会变化,所以把pa树用lct维护一下 维护lct的时候不要维护子树和,而应该连上一个点就将它一直到根的路径上的点都加上这个点的权,断开一个点就减去这个点的权,这样维护一棵有根树代码#include<algorithm>#incl
2017-04-04 08:42:00 860
原创 [BZOJ1782][Usaco2010 Feb]slowdown 慢慢游(dfs序+线段树)
题目描述传送门题解单点修改+树链查询转化成子树修改+单点查询 写链剖也嗞磁代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int n,dfs_clock;int tot,point[N],
2017-04-01 18:48:13 732
原创 [BZOJ1453][Wc]Dface双面棋盘(lct)
题目描述传送门题解这题好麻烦啊… 相当于是有一堆砍边和加边的操作,然后询问联通块数量 维护一棵以删除时间为权值的最大生成树,这样可以保证砍断一条边一定是联通块数量-1,加一条边一定是联通块数量+1 其余的做法实际上是和二分图那道题是一样的代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#in
2017-04-01 16:54:32 886
原创 [BZOJ2816][ZJOI2012]网络(lct+map)
题目描述题目描述 Description有一个无向图G,每个点有个权值,每条边有一个颜色。这个无向图满足以下两个条件: 1. 对于任意节点连出去的边中,相同颜色的边不超过两条。 2. 图中不存在同色的环,同色的环指相同颜色的边构成的环。 在这个图上,你要支持以下三种操作: 0. 修改一个节点的权值。 1. 修改一条边的颜色。 2. 查询由颜色c的边构成的图中,所有可能在节点u到节点v之间
2017-04-01 16:49:23 518
原创 [BZOJ4025]二分图(lct)
题目描述传送门题解写lct就应该有那种誓死不看板子的气魄。感觉这道题是挺好的一道题 首先考虑二分图的性质:不能有奇环!所以实际上这道题就是判断当前是否有奇环 那么先考虑一张静态的图如何判断是否存在奇环。可以发现,先对这个图搞出来一棵生成树,然后将非树边依次加入,每一次只判断这条边和树边是否成奇环,如果都不是奇环,那么一定没有奇环(只有一条公共边的两个偶环组合起来还是偶环) 那么考虑动态地维护一
2017-04-01 08:55:33 1283
原创 [BZOJ2594][Wc2006]水管局长数据加强版(kruskal+lct)
题目描述传送门题解写lct就应该有那种誓死不看板子的气魄。这道题思路还是很清晰的,维护一棵最小生成树,每一次找树链上权值最大的边 删边变成倒序加边 最开始的时候用没有删的边kruskal直接最小生成树 动态的话就是维护一棵lct,每一次加边的时候先找树链上的最大边,如果最大边大于当前边就把最大边砍掉,把当前边加进去 lct一遍敲√然而预处理错了,gg代码#include<algorithm>
2017-04-01 08:42:29 1055
原创 [BZOJ3129][Sdoi2013]方程(容斥原理+扩展lucas)
题目描述传送门题解这题刚开始sb了 首先所有的强制选1个 n1+1~n2的限制就再强制选ai-1个 剩余的需要容斥一下,答案=至少0个超过限制的-至少1个超过限制的+至少2个超过限制的… 2n12^{n1}枚举那些限制强制超过,强制超过的就是要再强制选ai个 然后最后剩下了一个m,x1+x2+…+xn=m,可以利用插板法得出答案极为Cn−1m+n−1C_{m+n-1}^{n-1} 扩展l
2017-03-30 21:58:40 847 1
原创 [BZOJ4756][Usaco2017 Jan]Promotion Counting(可持久化线段树)
题目描述传送门题解主席树好久没打也是各种手残啊 这题也是线段树合并的裸题过几天写一发!代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 100005int n,LSH,sz,dfs_clock,a[N],
2017-03-30 21:51:27 885
原创 [BZOJ3064]Tyvj 1518 CPU监控(线段树)
题目描述传送门题解这题真是一道恶心的线段树 需要维护的值有6个:当前最大值,当前的加法标记,当前的覆盖标记;历史最大值,历史最大的加法标记,历史最大的覆盖标记 其实说历史最大的加法和覆盖标记并不是那么准确,更准确地说应该是 现在能用来更新子树的最大值 维护当前的一系列量都比较好写,都是线段树的基本操作 但是维护历史的一系列量更新就比较麻烦了,首先要知道的是维护历史的量一定分别对应大于等于维护
2017-03-30 20:59:03 983
原创 [BZOJ4403]序列统计(lucas定理)
题目描述传送门题解首先这道题选出来的数只在于选的数本身,而不在于顺序,以为反正到最后要排序的 令r-l+1=m,也就是一共有m个数可选,那么设每一个数被选的个数为xi,那么x1+x2+…+xm=n 也就相当于将n个小球放到m个盒子里,显然插板,答案为Cm−1n+m−1C_{n+m-1}^{m-1} 那么这道题的答案就是Cm−11+m−1+Cm−12+m−1+...+Cm−1n+m−1C_{1+
2017-03-30 18:50:10 794
原创 [BZOJ2806][Ctsc2012]Cheat(广义后缀自动机+dp)
题目描述传送门题解hxy神犇出过一次胡策题,hxy神犇后缀自动机太神了没办法只能%%%@hxy首先对所有的模板串建立广义后缀自动机,然后对于每一个查询的串,预处理出来这个点最多向前多长是“熟悉的”,也就是以它为结尾的后缀在模板串中出现的最长的是多少a(i) 然后就是dp了,首席二分答案L,令f(i)表示到第i位,合法的划分方案中“熟悉的”总长度,最后只需要判断f(n)是否>=n*0.9 dp方程
2017-03-30 17:15:40 759
原创 [BZOJ2780][Spoj8093]Sevenk Love Oimaster(广义后缀自动机)
题目描述传送门题解对于所有的模板串建立广义后缀自动机,对于每一个点统计一下right集合中有几个模板串 然后对于所有的查询串在后缀自动机上匹配,然后看一下最终匹配到的那个点有几个模板串就行了 具体的方法是记录一下每一个点最后匹配到的是哪个模板串,然后记录一个cnt,每一次暴力顺着pre指针往上跳,跳到已经更新过的就退出 时间复杂度不大好算,其实就是每一次加入一个串自动机上的点最多被遍历一次代码
2017-03-30 11:40:08 1247
原创 [BZOJ3926][Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
题目描述传送门题解只与一个空地相邻的空地就是指叶子节点,刚开始理解错了 对于每一个叶子节点以它为根然后对这棵树建立广义后缀自动机 然后对于后缀自动机上的每一个点,以这个点为结尾的不相同的字符串其实就是step(i)-step(pre(i))个,也就是合法的区间长度 因为同一个字符串不会跑到不同的点上去啊…代码#include<algorithm>#include<iostream>#inc
2017-03-30 11:34:12 711
原创 [BZOJ4566][Haoi2016]找相同字符(后缀自动机)
题目描述传送门题解将两个串接在一起建立后缀自动机,中间加一个分隔符 对于自动机上的每一个点,统计其right集合中在第一个串中的数量cnt1,在第二个串中的数量cnt2 对于某一个点合法的长度是[step(pre(i))+1,step(i)] 答案累加就是cnt1*cnt2*(step(i)-step(pre(i)))代码#include<algorithm>#include<iostrea
2017-03-30 07:44:43 818
原创 [BZOJ2946][Poi2000]公共串(后缀自动机)
题目描述传送门题解同spoj1812代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005char s[N];int T,inf,n,p,np,q,nq,last,root,sz,ans;int ch[N][30],pre[N],step[N],c[N],pt[N]
2017-03-29 21:55:19 602
原创 [BZOJ1396]识别子串(后缀自动机+线段树)
题目描述传送门题解这题思路还是比较好想的 建立后缀自动机了之后统计每一个点right集合的大小,若一个点right集合的大小为1,那么以这个点为右端点的合法子串都是只在字符串中出现过一遍的,所谓合法就是长度在这个点的长度区间[Min,Max]里,这个点在原串中的位置也就是step 那么如何求每一个位置的最小值呢? 假设某一个点right集合大小为1,右端点为step,合法的长度区间为[Min,
2017-03-29 21:37:09 599
原创 [BZOJ4514][Sdoi2016]数字配对(数论+费用流)
题目描述传送门题解首先判断两个数是否能配对 线筛10710^7范围内的质数,然后超过这个范围的用Miller_Rabbin——直接暴力也可以 拆点xiyi,对于能配对的两个点ij,连边xi->yj,inf,ci*cj,xj->yi,inf,ci*cj 然后对于每一个点i,连边s->xi,bi,0,yi->t,bi,0 这样建图之后跑最大费用费用流,因为是每一次找一条最大的费用增广,所以如果当
2017-03-28 22:53:17 523
原创 [BZOJ1324]Exca王者之剑(最小割)
题目描述传送门题解题目就是吓唬你玩的 实际上就是有边相邻的格子不能同时选 黑白染色之后最小割代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define N 2000005#defin
2017-03-28 19:33:16 554
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人