自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ws_fqk

AFO

  • 博客(86)
  • 收藏
  • 关注

原创 2555: SubString 后缀自动机+LCT

答案显然是目标串状态的rightright集合的大小,因为要在线我们可以用LCTLCT来维护parentparent树。也就是说每次将当前点到根节点路径上的right+1right+1。#include<iostream>#include<cstdio>#include<cstring>#define N 1200005using namespace std;int len[N],fa[N

2016-03-24 10:35:30 473 1

原创 3998: [TJOI2015]弦论 后缀自动机

T=0T=0做法同此题,T=1T=1我也在那道题里说过了。#include<iostream>#include<cstdio>#include<cstring>#define N 500005using namespace std;char s[N];int len[N<<1],r[N<<1],f1[N<<1],f2[N<<1],cc[N<<1],fa[N<<1],q[N<<1];in

2016-03-23 21:00:54 649

原创 spoj7258:Lexicographical Substring Search 后缀自动机

经典题,找不重复字典序第kk小的字符串。 先跑出SAM,然后在SAM上DP。 因为从SAM的起点跑可以跑出所有的子串,所以我们用dpidp_i表示从ii点出发跑出的子串的个数,显然有 dpi=∑j=azdpchi,j+1dp_i=\sum_{j=a}^z dp_{ch_{i,j}}+1然后每次按照a..za..z的顺序从起点开始dfsdfs,如果沿chi,jch_{i,j}的方向走下去的个数≤

2016-03-23 18:27:07 697

原创 2946: [Poi2000]公共串 后缀自动机

二分答案+hash 二分答案+后缀数组 花3s感受一下: 说一下后缀自动机的做法。我们对一个串建立后缀自动机,而由于后缀自动机中由S到每个节点的路径能表示出以此节点结束的后缀,所以我们可以把每个串放进去匹配,得到每个串在每个状态的最大匹配长度maxmax,并且要沿parentparent树更新父节点的maxmax,最后将每个状态各个串的最大匹配长度取最小值,最后求各最小值的最大值。#inc

2016-03-22 21:19:27 410

原创 2946: [Poi2000]公共串 后缀数组

后缀数组,我们可以二分答案,然后对heightheight分组,然后判断一下有没有分别出现在各个串中的后缀。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 11000#define inf 1000000007using namespace std;int n,l,r,ans

2016-03-22 20:44:41 368

原创 spoj8222:Substrings 后缀自动机+DP

看后缀自动机看的真是生不如死,人太弱表示看不懂,现在还是没有完全理解啊。 这是一道SAM的入门题。 我们首先构造出SAM,然后SAM中每个节点ii有一个rightiright_i和lenilen_i,那么长度在(lenfai,leni](len_{fa_i},len_i]内的都出现了rightiright_i次。考虑如果一个长度为lenilen_i的出现了xx次,那么长度<leni<len_i的

2016-03-22 16:20:28 475

原创 4448: [Scoi2015]情报传递 dfs序+主席树

按照dfs序建主席树,把每个点出现的时刻作为权值加入,每次寻找<=i−c−1<=i-c-1的值的个数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define MN 10000005#define N 200005using namespace std;int n,Q,cnt,tot,df

2016-03-22 07:44:37 553

原创 4443: [Scoi2015]小秃玩矩阵 二分答案+最大流

签到题#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 505#define M 600005#define inf 1000000007using namespace std;int n,m,k,T,cnt;int a[255][255];int head[N],dis

2016-03-21 16:18:25 407

原创 3473: 字符串/3277: 串 后缀数组

被SAM艹翻了,说一下SA的做法。 首先把串连起来跑SA,然后枚举枚举每个后缀,看看该后缀有几个前缀符合条件,即所在区间不同串的数目≥k\geq k。我们可以预处理出recirec_i表示ii向左第一次出现kk个不同串的位置。然后可以发现,对于每个后缀,如果suffix(i)suffix(i)有jj个前缀合法,那么suffix(i+1)suffix(i+1)至少有j−1j-1个前缀合法,每次二分左

2016-03-21 08:38:16 739 1

原创 4296: [PA2015]Mistrzostwa 图的遍历

dfs一波#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 200005using namespace std;int n,m,d,cnt;int q[N],ans[N],du[N],head[N];int next[N<<1],list[N<<1];bool vis[N]

2016-03-20 19:21:38 395

原创 3316: JC loves Mkk 二分答案+单调队列

…平均数最大我居然不知道要二分答案,似乎是很常见的思路?我好弱。每次二分一个答案midmid,维护ai−mida_i-mid的前缀和,每次枚举一个ii,将sumi−Lsum_{i-L}加入单调队列,并保证队列中的点都在i−R..i−Li-R..i-L之内,每次要找区间的最小值mnmn,看看sumi−mn≥0sum_i-mn\geq 0是否成立,维护最小值可以单调队列来解决。#include<iost

2016-03-20 16:28:24 778

原创 3594: [Scoi2014]方伯伯的玉米田 DP+树状数组优化

由于没有发现一个正确性显然的性质..然后并没做出此题。 每次操作的右端点一定为nn,因为这样有可能增加前面的答案而不会减少后面的答案。 那么我们考虑dp,用fi,jf_{i,j}表示前ii个拔高了jj次的最长不降子序列长度。则fi,j=max{fx,y},x<i,y≤j,ax+y≤ai+jf_{i,j}=max\{f_{x,y}\},x<i,y\leq j,a_x+y\leq a_i+j。后面两

2016-03-20 14:24:05 661

原创 2216: [Poi2011]Lightning Conductor DP+决策单调性

woc..sb错误害死人啊 if (t>w||calc(i,n)>calc(q[w].p,n)); 多打了个分号然后调了一个小时。。这道题还是挺神的,我好像没做过除斜率优化外的决策单调性的题。 我们令fif_i表示点ii对应的答案,那么有fi=max{aj+∣i−j∣−−−−−√}−aif_i=max\{a_j+\sqrt{\mid i-j\mid}\}-a_i 那么由于y=x√y=\sqr

2016-03-20 11:20:41 618

原创 2118: 墨墨的等式 最短路

好题 既然是好题,那么我肯定不会做。 既然不会做,那就上网找题解吧。 膜Oxer神犇 突然发现还不如我去年写的spfa快#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#define inf 10000000000000000ll#define intinf

2016-03-20 08:04:44 479

原创 3620: 似乎在梦中见过的样子 KMP

枚举左端点跑KMP,O(n2)O(n^2)也能过真是!@#¥%……#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,ans,k;char s[20005];int next[20005];inline void KMP(int p){ for (int i=1;i<=n;i

2016-03-19 21:02:20 682

原创 3237: [Ahoi2013]连通图/3563: DZY Loves Chinese/3569: DZY Loves Chinese II 线性基+随机化

这是一道三倍经验的神题。 据说3237可以用CDQ搞,3563更是有神奇的做法。 不过还是直接看最强也是做法最神的版本3569。 我们首先可以求出一棵生成树,然后边就有树边和非树边。对于一条非树边,我们给它赋一个随机的权值,然后对于每条树边,它的权值就是所有覆盖这条树边的非树边的权值的异或和。这样我们可以发现,如果这条树边和所有覆盖它的非树边都删除了,就一定不会联通,而都删除代表选出的这些边的

2016-03-19 16:00:08 782

原创 2844: albus就是要第一个出场 线性基

我们首先求线性基,如果有kk个,那么就会有2k2^k种不同的异或结果,而每个结果出现的次数为2n−k2^{n-k},然后就好辣qwq。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define p 10086#define eps 1e-5using namespace std;int n,m,

2016-03-19 11:22:58 339

原创 4004: [JLOI2015]装备购买 贪心+线性基

从小到大加入线性基。。#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define eps 1e-5using namespace std;int n,m,cnt,ans;int ins[1005];struct node{ int c; double x[1005];

2016-03-19 10:10:26 361

原创 2460: [BeiJing2011]元素 贪心+线性基

从大到小加入线性基..我不会证明啊..还有拟阵是什么真心不想看啊好麻烦大概就是判断一下如果当前这个数不能被已经有的数经过异或得到那么就不会有子集的异或和为0,就可以将当前的加入。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n;long long ans;long long ins

2016-03-19 08:59:19 316

原创 2115: [Wc2011] Xor 线性基

挺神的一道题..感觉比较难想.. 我们要求出一条1−>n1->n路径的异或和,可以先求出任意一条简单路径,然后dfsdfs出所有的环,把环和简单路径异或在一起,就能表示出所有的路径。知道这个后,可以dfsdfs出所有环的异或值,然后求线性基就行了。 读入忘开long long挂了四遍#include<iostream>#include<cstdio>#define N 50005#defi

2016-03-19 08:26:50 351

原创 2707: [SDOI2012]走迷宫 tarjan+高斯消元解期望方程组

SDOI2012啊,不错的一道题。 点数很多,我们不能直接高斯消元,而题目中提示了每个强连通分量的点数<=100<=100,我们就可以先tarjan缩一下环。 先说一下无解的情况,如果有一个强连通分量到不了TT,就可以在这个强连通分量内无限的走,答案为INFINF,dfs一下就可以解决。 考虑有解的情况,这就成了DAG上的期望DP问题,我们可以用fif_i表示从ii走到TT的期望步数,初始f[

2016-03-18 20:39:38 487

原创 3572: [Hnoi2014]世界树 虚树+DP

虚树裸题,正反DP一遍求答案。 写了一发rmqlca发现比倍增慢。。这个显然调用超过n次了啊。。为什么O(nlogn)O(nlogn)预处理O(1)O(1)查询会比超过nn次O(logn)O(logn)查询慢? bzoj傻逼样例没空格,样例在程序最下面。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm

2016-03-18 16:11:01 431

原创 2597: [Wc2007]剪刀石头布 费用流

应该是费用流boss题了吧… Oxer神犇的题解 有点方#include<iostream>#include<cstdio>#include<cstring>#define N 12005#define mod 12005#define M 200005#define inf 1000000007using namespace std;int n,S,T,cnt=1,ans;i

2016-03-17 21:26:07 398

原创 1570: [JSOI2008]Blue Mary的旅行 最大流

挺常见的思路,按天数分层建图,从源点向第一天的11号点连边容量为TT,将每天的nn点连向汇点容量为∞∞,然后相同城市两天见连边容量为∞∞,不同城市之间这一天向下一天连边容量为航班的限制次数。 然后开始想二分,然后想了想这样每次要重构图会比较慢,不如直接枚举天数不断加边不断增广,只要最大流=T=T就证明可以了。#include<iostream>#include<cstdio>#include<

2016-03-17 18:47:46 365

原创 3357: [Usaco2004]等差数列 DP+map

不知道正解是什么。。用map水一水。 fi,jf_{i,j}表示到目前最后一位是ii个倒数第二位是jj的最长等差数列。 转移显然,判一下n=1n=1的情况。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<set>#include<map>#d

2016-03-17 15:57:52 339

原创 3163: [Heoi2013]Eden的新背包问题 多重背包

开始还在想离线把询问分组什么的…后来发现完全不用。 正反两遍多重背包,每次查询找最值就行了。。。 第一次写多重背包,原来一直以为是O(n3)O(n^3)的,原来是O(n2logn)O(n^2logn)的啊#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#inclu

2016-03-17 15:18:08 538

原创 4423: [AMPPZ2013]Bytehattan 平面图转对偶图+并查集

膜yzy神犇的题解 脑洞(我)好大(弱)啊根本想不到。。#include<iostream>#include<cstdio>using namespace std;int n,k,m,T,ans=1;int f[2500005];inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9')

2016-03-17 08:58:32 658

原创 1806: [Ioi2007]Miners 矿工配餐 DP

令fi,a1,a2,b1,b2f_{i,a_1,a_2,b_1,b_2}表示当前是第ii辆餐车,第一个煤矿的倒数两个是a1,a2a_1,a_2,第二个煤矿的倒数两个是b1,b2b_1,b_2,的最大答案。转移比较容易,需要滚动数组。 不要忘记处理前面不足3个即a1,a2,b1,b2a_1,a_2,b_1,b_2可能为0的情况!!!#include<iostream>#include<cstdio

2016-03-16 11:09:57 357

原创 1264: [AHOI2006]基因匹配Match DP+树状数组

朴素的LCS是O(n2)O(n^2)的,考虑只有B[i]=A[j]B[i]=A[j]时才会使答案+1+1,那么由于本题的特殊性质,对于某一个B[i]B[i],与之相等的A[j]A[j]只有55个,那么我们可以用B[i]B[i]来更新这五个位置的答案,可以用树状数组维护前缀最值。#include<iostream>#include<cstdio>#define N 100005using nam

2016-03-16 08:47:34 480

原创 1089: [SCOI2003]严格n元树 DP+高精度

可以发现对于一棵深度为nn的树,这棵树除深度为nn的那棵子树外其它子树的高度可以是0..n0..n,所以如果用fif_i表示深度为ii的树的个数可能不太好转移,我们考虑前缀和的形式,令sis_i表示深度≤i\leq i的树的个数。 那么一棵深度为nn的树其实就是根节点加nn个深度<=n−1<=n-1的树,所以有si=sni−1+1s_i=s_{i-1}^n+1,然后我们就可以高精度搞一搞了。 重

2016-03-16 07:44:55 449

原创 2659: [Beijing wc2012]算不出的算式 打表+找规律

打表找一下规律。如果p=qp=q则返回p+12×q2\frac{p+1}{2}\times\frac{q}{2}否则返回p2×q2\frac{p}{2}\times\frac{q}{2}#include<iostream>#include<cstdio>using namespace std;int prime[21];bool flag[21];const int N=20;long

2016-03-15 20:48:56 329

原创 1858: [Scoi2010]序列操作 线段树

卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧槽卧

2016-03-15 16:48:21 398

原创 3203: [Sdoi2013]保护出题人 凸包+三分

膜IOI爷的题解 凸包上三分。。#include<iostream>#include<cstdio>#define N 100105using namespace std;int n,top,stack[N];double d;double sum[N],x[N];struct node {double x,y;} a[N];double cross(node a,node b,n

2016-03-15 09:09:18 422

原创 1857: [Scoi2010]传送带 三分套三分

第一次写三分囧。 如果求一个点到一条线段的最短距离,可以在线段上三分,然后我也不知道这题为什么能三分囧。。网上都说是三分而且网上也没有证明。。#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#define eps 1e-8using namespace std;struct node {double x

2016-03-15 06:43:22 378

原创 1055: [HAOI2008]玩具取名 区间DP

令fi,j,kf_{i,j,k}表示si..sjs_i..s_j是否能缩成字母kk,k=0,1,2,3分别表示W,I,N,Gk=0,1,2,3分别表示W,I,N,G。 然后记忆搜一下。。#include<iostream>#include<cstring>#include<cstdio>using namespace std;int len;int f[205][205][4];cha

2016-03-14 16:07:05 316

原创 1564: [NOI2009]二叉查找树 区间DP

DP太弱了。。不会做T T这题的条件非常多也非常乱,所以我们要先挖掘一些性质,尽量的找到一个解决问题的顺序。可以发现所谓的数据值和权值其实就是一棵treap,改变权值相当于treap的旋转,由于数据值不变,所以中序遍历是不变的,所以我们可以按数据值排序,得到树的中序遍历。并且我们发现权值可以取所有实数,而且权值的大小与最后的答案无关,所以可以离散权值到[1,n][1,n]内。 然后我们考虑用fi,

2016-03-14 15:28:06 540

原创 4154: [Ipsc2015]Generating Synergy K-D tree

按照dfs序建K-D树,用deepideep_i表示ii在原树中的深度,想想成二维平面中的点,第一维是dfs序,第二维是深度,则对于一个染色操作其实就是在二维平面内的区域[inx..outx][deepx..deepx+l][in_x..out_x][deep_x..deep_x+l]内进行覆盖,可以用K-D树来解决。 sb错误get。。#include<iostream>#include<cs

2016-03-14 11:00:07 448

原创 3489: A simple rmq problem K-D tree

K-D树解决一些传统的序列问题,详细解法可参见任之洲《k-d tree在传统OI数据结构题中的应用》 用lastxlast_x表示xx上次出现的位置,nextxnext_x表示xx下次出现的位置,所以要求的就是满足l≤i≤r,lastai<l,nextai>rl\leq i \leq r,last_{a_i}<l,next_{a_i}>r的aia_i的最大值,可以看作是三维平面中的点,然后用三维k

2016-03-14 06:21:05 571

原创 4066: 简单题 K-D tree重构

sb错误调了两个小时。。。 其实就是K-D tree,然后在不太平衡的时候就暴力重构一下。#include<iostream>#include<cstdio>#include<algorithm>#define N 200005#define inf 1000000007using namespace std;int cunt;struct node{ int d[2],m

2016-03-13 19:57:55 465

原创 3365: [Usaco2004 Feb]Distance Statistics 路程统计 点分治

听说有点分治裸题来水了一发。。回去继续搞K-D tree了。。#include<iostream>#include<cstdio>#include<algorithm>#define inf 1000000007#define N 80005using namespace std;int mx[N],size[N],stack[N],dis[N];bool vis[N];int he

2016-03-13 15:04:08 502

空空如也

空空如也

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

TA关注的人

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