随笔分类 - all—板子
摘要:先跑spfa求出最短路构成的DAG,然后在DAG上跑出支配树dfs出size取max即可 关于支配树,因为是DAG,支配点就是入点在支配树上的lca,所以一边拓扑一边预处理倍增,然后用倍增求lca cpp include include include include include using n
阅读全文
摘要:求出支配树输出到father的和即可 支配树见:https://blog.csdn.net/a710128/article/details/49913553 cpp include include include include using namespace std; const int N=30
阅读全文
摘要:首先平面图转对偶图,大概思路是每条边存正反,每个点存出边按极角排序,然后找每条边在它到达点的出边中极角排序的下一个,这样一定是这条边所属最小多边形的临边,然后根据next边找出所有多边形,用三角剖分计算面积 然后就比较妙了,把对偶图随便搞一个生成树出来,然后对于每个询问,如果一条边是树边,那么如果这
阅读全文
摘要:对于原有边,流区间是(1,inf),按着原边连,然后再连(s,i,(0,inf)),(i,t,(0,inf))表示任意位置进出雪场 按着这个建出新图 然后最小流的方法是先跑可行流,设ans为(t,s,(0,inf))的流量,然后取消这条边,跑从原来的t s的最大流为ans2,答案就是ans ans2
阅读全文
摘要:连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0),表示这条边会流固定v[i]个人 连(s,ss,(m,m),0),表示限制m个人 然后跑有上下界有
阅读全文
摘要:整体二分: 对于每一个修改操作,标记为1,并且加一个标记为 1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和 1的操作都在树状数组对应位置上加/减出来,然后询问操作根据k和询问答案大小决定放在哪部分传下去 cpp include inc
阅读全文
摘要:圆方树不仅能解决仙人掌问题(虽然我仙人掌问题也没用过圆方树都是瞎搞过去的),还可以解决一般图的问题 一般图问题在于缩完环不是一棵树,所以就缩点双(包括双向边) 每个方点存他所在点双内除根以外的点的最小权值,这样的好处是更新原点的时候不用更新它一圈的方点,只更新父亲即可 树剖维护,然后查的时候如果lc
阅读全文
摘要:参考:https://www.cnblogs.com/2016gdgzoi509/p/8999460.html 列出生成函数方程,g(x)是价值x的个数 $$ f(x)=g(x) f^2(x)+1 $$ +1是f[0]=1 根据公式解出 $$ f(x)=\frac{1+( )\sqrt{1 4 g(
阅读全文
摘要:并不会递推,不过板子挺好背的,只要是类似的递推都能用,但是注意c数组不能使负数 如果除了递推还有常数项的话,就用f[i] f[i 1]的方式消掉常数项(然后多一个f[i 1]的项) cpp include include include include using namespace std; co
阅读全文
摘要:设f[i][j][s]为轮廓线推到格子(i,j),状态为s的方案数 括号表示一段线的左端和右端,表示成左括号和右括号,状压的时候用1和2表示,0表示已经闭合 下面的蓝线是黄色格子的轮廓线,dp转移要把它转到橙色轮廓线,设已经在状压的s中取到两条边的状态记为b1,b2 然后分很多情况讨论: (i,j)
阅读全文
摘要:统计在一个root下的两个子树,每个子树都和前面的运算一下再加进去对于这种需要排序的运算很麻烦,所以考虑先不去同子树内点对的算出合法点对个数,然后减去每一棵子树内的合法点对(它们实际上是不合法的,相当于一个容斥) 算点对用排序+双指针即可 cpp include include include us
阅读全文
摘要:多维KDtree板子 左右儿子的估价用mn~mx当区间,假设区间里的数都存在;k维轮着做割点 cpp include include include include include include using namespace std; const int N=50005; int n,k,m,r
阅读全文
摘要:其实理论上cdq更优 核心是依次取x值、y值的mid作为当前节点,向两边递归建立二叉树,树上维护size:子树大小;mx[0/1]:子树内最大x/y;mn[0/1]:子树内最小x/y;d[0/1]:这个点的x/y; 建树的时候用到nth_element,用处是把第k个数放到k位置,并且把小于k的放在
阅读全文
摘要:是动态dp的板子 大致思想就是用g[u]来表示不包含重链转移的dp值,然后用线段树维护重链,这样线段树的根就相当于这条重链的top的真实dp值 每次修改的时候,修改x点会影响到x到根的真实dp值,但是只会影响到每条重链的低端点的dp值,相当于在log个线段树上单点修改 cpp include inc
阅读全文
摘要:一直WA……找了半天错的发现居然是解密那里的mask其实是不能动的……传进去的会变,但是真实的那个不会变…… 然后就是后缀自动机,用LCT维护parent树了……注意不能makeroot,因为自动机的根是不会变的(同理也不能翻转区间),其实就是低配LCT(?) cpp include include
阅读全文
摘要:就是非旋treap的板子 cpp include include include using namespace std; const int N=500005,mod=73939133,bs=997687623; int q,tot,rt,st=123; struct qwe { int c[2]
阅读全文
摘要:T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次…… 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子
阅读全文
摘要:扩展中国剩余定理的板子,合并完之后算一下范围内能取几个值即可(记得去掉0) cpp include include include using namespace std; const int N=15; int T,n,m; long long a[N],b[N],A,B,x,y,d; bool
阅读全文
摘要:根据套路列出式子:\\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \\),然后暴力展开即可 cpp include include include using namespace std; const int N=205; int n,m,c[N
阅读全文
摘要:指数型生成函数,推一推可得: $$ (1+\frac{x^1}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+...)^2+(1+\frac{x^2}{2!}+\frac{x^4}{4!}+\frac{x^6}{6!}+...)^2 $$ $$ =e^{2x}+(\frac{e
阅读全文

浙公网安备 33010602011771号