03 2017 档案
摘要:思路: 反向图求最大拓扑序 反向输出
阅读全文
摘要:思路: 暴力建图有n*m条边 考虑怎么优化 (那就只能加个线段树了呗) 然后我就不会写了..... 抄了一波题解
阅读全文
摘要:思路: 一开始 我是想 对于固定的左端点 从左到右 最多有 log种取值 且单调递减 那不妨倍增预处理+二分GCD在哪变了.. 复杂度O(nlog^2n) gcd最多log种取值.. 好了我们可以暴力了... 复杂度O(nlogn)
阅读全文
摘要:思路: 懒得写了 http://blog.csdn.net/werkeytom_ftd/article/details/51277482
阅读全文
摘要:思路: 高一神犇 竟然 问我这道题 我光荣地 看着题解(划掉) 写了一下午 QaQ multiset不能erase(一个值) 这样就把等于这个值 的数都erase掉了 (woc我一开始不知道啊啊啊 ) 注意细节...
阅读全文
摘要:思路: 最裸的方程:f[i][j]=Σf[i-1][j-k]*F[k] 诶呦 这不是卷积嘛 f[i]就可以用f[i-1]卷F 求到 但是这样还是很慢 设p[i] 为Σ f[j](1<=j<=i) 发现p可以倍增推 于是 就 倍增一下 就完了... http://www.cnblogs.com/Sky
阅读全文
摘要:思路: 我们可以分开算每个格子自己的期望啊... 期望可以累加的 那就把这个大格子 分成 9个部分 分别算好了...
阅读全文
摘要:思路: 经典题 不解释 找到最小的数mn 所有都是在mod mn的意义下 搞得 i->(i+a[i])%mn 边权为a[i]
阅读全文
摘要:思路: 数据范围不大.. 那我们就枚举M好了.. 再两两判断一下有没有冲突 怎么判断呢? exgcd!!! p[i]*k+c[i]=p[j]*k+c[j] (mod m) (p[j]-p[i])*k=c[i]-c[j](mod m) (p[j]-p[i])*k+m*b=c[i]-c[j] 但是 gc
阅读全文
摘要:思路: 求出每行的和 sum_row 每列的和 sum_line 二分最后的答案mid S->i 流量[sum_row[i]-mid,sum_row[i]+mid] i->n+j 流量[L,R] n+j->T 流量 [sum_line[i]-mid,sum_line[i]+mid] 套用有上下界的网
阅读全文
摘要:思路: 套用有上下界的网络流 就好了 (这算是裸题吧) 比如 有条 x->y 的边 流量上限为R 下限为L 那么du[x]-=L,du[y]+=L 流量上限变成R-L du[x]>0 SS->x 流量为du[x] 否则 x->TT 流量为-du[x]
阅读全文
摘要:思路: 先二分答案 f[x][j]表示在x的子树里选j个点 初始化 x!=0 -> f[x][1]=p[x]-s[x]*mid x=0 -> f[x][0]=0 类似4033的那样转移 看似O(n^3)实际O(n^2) 加一个二分 复杂度O(能过)
阅读全文
摘要:记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0<=>(x=>x′)AND(y=>y′) xORy=1<=>(x′=>y)AND(y′=>x) xXORy=0<=>(x′=>y′)AND(x=>y)A
阅读全文
摘要:思路: http://www.cnblogs.com/exponent/archive/2011/08/14/2137849.html f[i,i+len]=sum[i,i+len]-min(f[i+1,i+len],f[i,i+len-1]); 但题目把n出到5000,内存卡到64M,二维的状态存
阅读全文
摘要:思路: 这好像是我刚学单调性的时候做的题 (我是不会告诉你 我被这题教做人了的...)
阅读全文
摘要:思路: (抄一波公式) $$ans=min(dep[x],k)×(size[x]-1)+\sum_{y在x的子树中,且dis(x,y)<=k}(size[y]-1)$$ 顺着DFS序 按照deep往线段树里插就好了...
阅读全文
摘要:思路: 因为有深度的限制,并且我们是在线段树上维护权值,所以我们把点按照dep排序,然后一个一个修改...主席树的下标就是dfs序,子树的查询就是区间查询... 但是发现这样怎么去维护LCA呢...因为要求有序,所以我们可以用set来维护相同颜色的节点...如果把一个点加入集合之后这个点前驱为x,后
阅读全文
摘要:思路: 若a,b是整数,且(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。 它的一个重要推论是:a,b互质的充要条件是存在整数x,y使ax+by=1. 设a1,a2,a3......an为n个整数,d是它们的最大公约数,那么存在
阅读全文
摘要:思路: $x^2=kn+1$ $x^2-1=kn$ $(x+1)(x-1)=kn$ 令$x+1=k1n1$,$x-1=k2n2$,其中$k1k2=k$,$n1n2=n$ 枚举n约数 >=$\sqrt{n}$的,代入验证 去重
阅读全文
摘要:思路: 放个题解好吧. http://www.cnblogs.com/zyfzyf/p/4114774.html //By SiriusRen #include <queue> #include <cstdio> #include <algorithm> using namespace std; c
阅读全文
摘要:思路 : 先对b 的所有后缀建立trie树 第一问 暴力枚举a串的起点 在trie树上跑 找到最短的 第二问 也是暴力枚举a串的起点 a和b顺着暴力匹配就好 第三问 求出来a在第i个位置 加一个字母j 能够到的最近的位置 f[i][j] 到最后就是inf 从f[0][j]DFS 在trie上跟着跑找
阅读全文
摘要:思路: 普通的DP很好想吧 f[i][j]+=f[i-1][j*s[k]] 前i个数 mod m=j 的个数 m是质数 模数是质数 这就很有趣了 那么我们就求出来原根 所有的数都取指数 搞出生成函数乘法就变成了加法 快速幂+$NTT$就好了 (注意特判零)
阅读全文
摘要:思路: 1.最裸的线段树合并 2. 我们可以观察到子树求一个东西 那我们直接DFS序好了 入队的时候统计一下有多少比他大的 出的时候统计一下 减一下 搞定~ 线段树合并代码:
阅读全文
摘要:思路: 跟POJ有一道时限挺长的题一模一样 哦 POJ 1904 题解可以看这个(捂脸) http://blog.csdn.net/qq_31785871/article/details/52963278
阅读全文
摘要:思路: 把询问离线下来,查询max和查询min相似,现在只考虑查询max 令sum[l,r,x]表示l到r内的数为左端点,x为右端点的区间询问的答案 那么询问就是sun[l1,r1,r2]-sum[l1,r1,l1-1] 从1到n枚举x,维护区间线段树表示sum[l,r,x],发现从x-1转移到x的
阅读全文
摘要:思路: 通过打表观察 这是个卡特兰数 但是它mod的数不是质数 怎么办呢 把所有数分解质因数好了 线性筛出mindiv 顺着mindiv分解质因数 复杂度$O(nlogn)$
阅读全文
摘要:思路: 先跑一遍Floyd 更新的时候map[i][j]=map[i][k]+map[k][j] k需要小于i或j 正常建边: 把所有点 拆点-> i,i+n add(x,y,C,E)表示x->y建边 话费为C 容量为E add(S,0,0,k) add(i,j+n,map[i][j],1) add
阅读全文
摘要:思路: Lucas定理的模板题.. 4403 2982
阅读全文
摘要:思路: 一开始以为是真·欧几里德 a,b来回消 (其实用不了那么麻烦) 我们发现 这是一个矩形 求一下整点数 完了.. 要特判 p=q的情况
阅读全文
摘要:思路: Claris大大说了 排序以后 这个可以看成是括号序列 f[i][j][k]表示到了i j个左括号 k个右括号
阅读全文
摘要:思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...)
阅读全文
摘要:思路: 枚举约数 套个裸的Lucas+CRT就完了...
阅读全文
摘要:思路: (是不是只有我作大死写了个分块) up[i][j]表示从第i块开始到第j个位置 上升的最大值 down[i][j]同理 left_up[i]表示从第i块开始能够上升的最长长度 left_down[i]同理 right_up[i]表示从第i块结尾上升的最长长度 right_down[i]同理
阅读全文
摘要:思路: 我们可以搞一棵线段树 对于一段区间有6种情况需要讨论 左上右下、左上右上、左下右下、左下右上 这四种比较好维护 用左上右下举个例子吧 就是左儿子的左上右下&左区间到右区间下面有路&右儿子的左下右下 或者是左儿子的左上右上&左区间到右区间上面有路&右儿子的左上右下 还有两种 区间的左(右)端点
阅读全文
摘要:思路: $x^2+y^2=r^2$$y=\sqrt{(r+x)(r-x)}$令$ d=gcd(r+x,r-x)$设A=$(r-x)/d$ $B=(r+x)/d$则$gcd(A,B)=1$$y^2=d^2*A*B$∵$d、y$为完全平方数、$gcd(A,B)=1$、且$A!=B$(在坐标轴上的最后算)
阅读全文
摘要:思路: 跟今年WC的题几乎一样 (但是这道题有重 不能用bitset水过去) 正解:分块FFT http://blog.csdn.net/geotcbrl/article/details/50636401 from GEOTCBRL 可以看看hgr的题解..写得很详细 //By SiriusRen
阅读全文
摘要:思路: 讲道理我应该写单调队列优化多重背包的 但是我不会啊 但是我现在! 还不会啊 我就写了个二进制优化的.. 过了
阅读全文
摘要:思路: 把from&to都>k的直接加边 剩下的如果是一棵树就加. 否则ans++ (我的代码写的是反着的 不过意思都一样)
阅读全文
摘要:思路: RT 可以看VFK的题解 我写了半天拍了半天... 不过是$nlog^2n$的 要写垃圾回收的 线段树 如果某个节点的sum是0 也可以free掉
阅读全文
摘要:思路: LCT啊... (分块也行) 不过YOUSIKI出了一道“弹飞大爷” 就不能用分块水过去了
阅读全文
摘要:思路: 为什么好多字符串的题都可以用FFT啊.... 我们其实是要判断$\Sigma (a[i]-b[i])^2*a[i]*b[i]==0$ 那就把a串翻转过来 把 上式展开 大力做几遍FFT就好啦~
阅读全文
摘要:思路: 二分图博弈嘛 找到最大匹配的必须点 跑个网络流 前后DFS一遍
阅读全文
摘要:思路: 我只是想写一下cdq…… 二维偏序 一维排序 一维cdq分治 (我忘了归并排序怎么写了,,,) 写了个sort… 复杂度是O(nlog^2n)//By SiriusRen#include #include #include using namespace std;cons...
阅读全文
摘要:思路: 考虑把询问离线 按照m排序 物品按照a排序 f[i]表示c[j]的和到i b的最大值 背包就好 O(nk)竟然能过……//By SiriusRen#include #include using namespace std;const int N=1005;struct As...
阅读全文
摘要:思路: 考虑 把男生排成一排 女生和老师往里插 分成两种情况. 1. 女生中间夹着老师 2. 女生中间没有夹着老师求一下组合* 阶乘就好了 先放Python代码 简洁易懂def fact(n): temp=1 for i in range(1,n+1): ...
阅读全文
摘要:http://blog.csdn.net/mirrorgray/article/details/51123741 安利队长blog… 树形dp吧,状态挺显然的,dp[x][j]表示以x为根的子树中,选择了j个黑点的答案,但注意这个答案是整棵树的答案。 我们只需要对于每个儿子...
阅读全文
摘要:思路: 二分答案 判一下能不能加//By SirisuRen#include #include #include using namespace std;const int N=40050;int n,m,k,xx,yy,aa,bb,ans,f[N],top;struct Node...
阅读全文
摘要:思路: 如果 每个联通块 边数>=点数 就OK 用并查集搞//By SiriusRen#include #include #include using namespace std;const int N=100050;int n,m,xx,yy,sizep[N],sizee[N],...
阅读全文
摘要:思路: f[]表示选1个点的 g[]表示选2个点的 dp一下 ans+=(ll)g[k]*deep[k]; g[k]+=(ll)f[k]*deep[k]; f[k]+=deep[k];听说有O(n)做法但是我不会//...
阅读全文
摘要:题意是啥……. 思路: 不是与1或n连起来的边 边权是1 否则是inf 跑网络流//By SiriusRen#include #include #include #include using namespace std;const int N=66666,inf=0x3f3f3f...
阅读全文
摘要:写完维修数列 这不是水题嘛233333//By SiriusRen#include #include #include using namespace std;const int N=5000050;int n,pos=1,ch[N][2],fa[N],size[N],root,x...
阅读全文
摘要:思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西我们发现 等式左边的加起来=0 可以把每个方程看成一个点正->负 连边 跑费用流即可//By SiriusRen#include #include #include #include using nam...
阅读全文
摘要:思路: set按照dfn排序 两点之间的距离可以O(logn)算出来 加一个点-> now ans+=dis(pre,now)+dis(now,next)-dis(pre-next); 删一个点同理 最后加上dis(begin,end)即可//By SiriusRen#includ...
阅读全文
摘要:思路: 肯定每回只加最大值和次大值如果 一开始的最大值>0且次大值0搞一个矩阵 推斐波那契数列 求和 就好…//By SiriusRen#include #include #include using namespace std;const int mod=10000007,N=1...
阅读全文
摘要:GSS系列有一丝丝像… 只不过那个是线段树 这个是splay 翻转 插入 删除啥的就是普通的splay 合在一起了而已//By SiriusRen#include #include #include using namespace std;struct Tree{ int...
阅读全文
摘要:思路: 记录每栋楼楼顶与原点连线的斜率 那么一栋楼可见当且仅当前面所有楼的斜率都小于这栋楼 将n栋楼分为√(0.5*n*logn)块 每一块内维护一个单调上升子序列(注意不是LCS) 比如说4 1 2 3 5 那么维护的序列就是4 5 修改的时候块内暴力重建 然后查询顺着块撸一遍 ...
阅读全文
摘要:思路: a[i]//By SiriusRen#include #include #include #include using namespace std;const int N=20050;int n,m,cpy[N],h[N],u,Block,block[N],xx,yy,an...
阅读全文
摘要:思路: 考虑分块 f[i][j]表示从第i块开头到j的最大值 cnt[i][j]表示从第i块开始到序列末尾j出现了多少次 边角余料处理一下就好啦~ //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using
阅读全文
摘要:思路: 可以先做做BZOJ3585 是序列上的mex 考虑莫队的转移 如果当前数字出现过 线段树上把它置成1 对于询问 二分ans 线段树上查 0到ans的和 是不是ans+1 本题就是把它搞到了序列上 带了个修改… 麻烦一点 本质上是一样的//By SiriusRen#...
阅读全文
摘要:zrt当年是怎么想到的……. 思路: 考虑把序列分块 对于每块 存xor[i] 表示从本块开头到i的前缀异或和 把它扔进set里 存gcd[i]表示从本块开头到i的前缀gcd. 如果这一块的GCD和整个的gcd的gcd是一样的 从set里找ans 否则暴力.. GCD最多l...
阅读全文
摘要:单调栈跑两遍求出来 ht[i]为最小值的那段区间//By SiriusRen#include #include #include using namespace std;const int N=500050;int n,cntA[N],cntB[N],A[N],B[N],sa[N]...
阅读全文
摘要:就第三个操作比较新颖 转化成 在l前插一个点 把r和r+1合并//By SiriusRen#include #include #include using namespace std;const int maxn=100005,mod=20130426;typedef long l...
阅读全文

浙公网安备 33010602011771号