摘要: ac自动机,bit,dfs序。 本文所有的stl都是因为自己懒得实现。 首先x在y里面出现,就意味y节点可以顺着fail回去。 反向建出一个fail数,然后搞出dfs序列。找出x对应的区间有多少个y。 再用离线操作,把每个y需要计算的x事先保存下来。 #include #include #include #include #include using namespace st... 阅读全文
posted @ 2016-04-28 23:51 invoid 阅读(196) 评论(0) 推荐(0) 编辑
摘要: st表。 st[i][j]表示[i,i+2^j-1]的最小的s的下标。 #include #include #include #include using namespace std; const int maxn = 500000 + 10; int n,k,L,R; int s[maxn],st[maxn][20],log[maxn]; struct Status { int... 阅读全文
posted @ 2016-04-26 23:49 invoid 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 最小费用最大流。 拆点法建模,一个点分为u0,u1。 虚拟源点S与每个u0连一条容量为1,费用为a[u]的边,与每个u1连一条容量为1,费用为0的边。 每个u0与虚拟汇点T连一条容量为1,费用为0的边。 每个u能到达v的点u1和v0连一条容量为1,费用为w的边。 为什么? 1.如果一个点是用瞬间移动到达的,就相当与从S点瞬间移动。 2.如果一个点是航路连去的,相当于从另一个点的... 阅读全文
posted @ 2016-04-26 20:46 invoid 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 2维bit。每个颜色建一个。 #include #include #include using namespace std; const int maxn = 300+10; struct Bit2D { int a[maxn][maxn],n,m; inline int lowbit(int x) { return x&-x; } ... 阅读全文
posted @ 2016-04-25 22:56 invoid 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 差分约束,dag最长路。 坑点在于有一个100000 长的链,虚拟节点倒序加就a了。 用queue是太懒,tyvj上过不了。 #include #include #include #include using namespace std; const int maxn = 100000 + 10; const int maxm = 400000 + 10; int n,k; i... 阅读全文
posted @ 2016-04-25 22:21 invoid 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 一定要想到是最小割。 虚拟源点S连支持者容量为1,反对者连虚拟汇点容量为1,支持者连反对者容量为1。 割俩面的点,一面是支持,一面是反对,冲突数就是割(哥。。雾)。 最小冲突数就是最小割。 #include #include #include using namespace std; const int maxn = 300 + 10; const int maxm = 100000... 阅读全文
posted @ 2016-04-25 20:54 invoid 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数。 首先设k为n的约数,则res+=(k*s(k))。s(k)为满足gcd(m,n)=k的m的个数。 因为gcd(m,n)=k,所以gcd(m/k,n/k)=1,则s(k) = phi(n/k)。 边界判断要注意。 每次加的为i和n/i。 如果i*i=n,要特判,否则会重复。 阅读全文
posted @ 2016-04-25 20:19 invoid 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 其实我觉得有些题不会做见见世面也是挺好的。。//蒟蒻本性 用一个T,在T范围的暴力求出,T范围之外的因为比较小所以近似。 #include #include #include #include using namespace std; const int maxn = 100000 + 10; const int T = 100; const double eps = 1e-8; in... 阅读全文
posted @ 2016-04-24 10:49 invoid 阅读(159) 评论(0) 推荐(0) 编辑
摘要: dp。方型棋盘不用说,矩形棋盘每个点先维护先上能达到的最大距离v。然后dp找出以自己的v最小时向左向右能达到最大的距离l,r。 因为最大矩形棋盘的宽度肯定等于某个点的v,我们又求出了每个v对应的最长距离(r-l+1),所以正确性得以保证。 还有一个小技巧,把横纵坐标和为奇数的点异或。就可以把原问题转化为求最大的01矩阵了。 #include #include #include usin... 阅读全文
posted @ 2016-04-24 09:54 invoid 阅读(269) 评论(0) 推荐(0) 编辑
摘要: cdq分治,dp。这道题太难了,我看了一上午一点头绪也没有//蒟蒻本性 连这篇题解都是边做边写的,要不就忘了(雾)。。 维护的是上凸包。 2.30 pm 终于过了,照着人家的题解打,居然都交了10多遍。//蒟蒻本性 首先,不难得到这样的结论:如果买就要把所有的钱都用完(买能挣钱,就要多买,不如其他的 阅读全文
posted @ 2016-04-16 17:03 invoid 阅读(165) 评论(0) 推荐(0) 编辑