摘要:
DP。。 f[i][j][k]表示左上结束节点是第i条副对角线上的第j个点,右下结束节点是第n*2-i条副对角线上的第k个点,构成回文的方案数。 i那维滚动一下。时间复杂度O(n^3)空间复杂度O(n^2) 1 #include<cstdio> 2 #include<iostream> 3 #inc 阅读全文
摘要:
tarjan、并查集、树状数组、树链剖分。 时间倒流,变删边为加边。 先求一波边双联通分量,缩点。 题目保证最后还是整张图联通的。。所以就是一棵树。 现在的操作就是,将路径上的边权置0(加边时),查询两点间边权和。 可以转换成求根到点路径上边权和,置0的时候,就相当于将子树内的值都减去原边的长度,可 阅读全文
摘要:
每次到达一个点,或者点亮一个房间的灯的时候,检查一下它四周的点能否走。 一开始看错题了..要求的是最多能开多少房的灯。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cmath> 5 #include<a 阅读全文
摘要:
结论是..把A串中的字符挪到B串里最近的出现这个字符的地方就能最优了。。。 求出A串中的每个位置上的字符,之后要挪到哪个位置。然后求一波逆序对就是答案了。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<a 阅读全文
摘要:
将正方形视为连接字符间的边。比方说正方形上存在A+,B-,就从A-往B+连边,表示字符可以通过这个正方形进行变换。 如果能构成环的话就可以无穷大了。。。判环随便写个拓扑什么的... 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 阅读全文
摘要:
大概是叫倍增Floyd? 显然最多200个点...f[i][j][k]表示从j到k,走2^i步的最小路程。就随便转移了。。 查询的话就是把n二进制位上是1的那些都并起来。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #i 阅读全文
摘要:
旋(xuàn)转(zhuàn)卡(kǎ)壳(qiào)(大雾 抄了黄学长的标程当板子。。 求凸包后,两对平行线卡来卡去..上下一对的直接用单峰性质,左右一对的也是...就看到底边的投影长,这个用数量积除以底边长。 1 #include<cstdio> 2 #include<iostream> 3 # 阅读全文
摘要:
一开始看错题了... 求经过的道路数量就求个lca,把路径上的点置为已经过的话,可以写一个并查集,把某个点往上连续已经过的一段点并起来。 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 阅读全文
摘要:
强行上莫队+线段树显然是会T的。 如果莫队没有删除的转移的话...就可以用并查集代替线段树。 所以按照一般姿势将询问排序好后,右端点照常,左端点每次从左端点所属块的末端开始跑,跑完后暴力撤回。 复杂度还是O(m*n^0.5) 为了能够撤回,并查集合并的时候,以临时增加的点为父亲。 1 #includ 阅读全文