摘要: 先用floyd求出不经过大于i或大于j的点的i,j间最短路径,然后考虑这样建图: 对于每个点i,将其拆分成i、i',连边: s -> i' 容量为INF,费用为0 s -> 1 容量为k,费用为0 i' -> j 容量为1,费用为dist[i][j] i -> t 容量为1,费用为0 此时这张图的最 阅读全文
posted @ 2017-03-13 20:09 gjghfd 阅读(186) 评论(0) 推荐(0) 编辑
摘要: bzoj2227 看电影: 先打个暴力,然后找规律。得到答案:ans=(k+1)n-1*(k-n+1)/kn 正解:http://blog.lightning34.cn/?p=166 注意到答案很大,又由于n,k<=200,将k+1,k-n+1,k分解质因数,然后高精乘就可以了 暴力代码: 1 #i 阅读全文
posted @ 2017-03-13 10:16 gjghfd 阅读(190) 评论(0) 推荐(1) 编辑
摘要: 先考虑没有深度限制的情况。 先将每个节点的权值设为1,对于颜色相同且在dfs序中最近的2个点,用倍增求出lca并将它的权值减一。然后子树中不同的颜色种数就是子树的权值和了。 有深度限制时,考虑以深度为时间建立主席树。 将每个点按深度排序,枚举一遍。对每种颜色开一个set,枚举到一个点时将它在dfs序 阅读全文
posted @ 2017-03-12 15:24 gjghfd 阅读(390) 评论(0) 推荐(1) 编辑
摘要: 题目大意: T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n)。给出n和k,求S(n)。 例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^2 + 5^2 = 55。 由于结果很大,输出S(n) Mod 1000000007的结果即 阅读全文
posted @ 2017-03-12 09:41 gjghfd 阅读(164) 评论(0) 推荐(1) 编辑
摘要: 对于修改,将其splay到根再修改。 对于查询x,y路径上的权值和,先将x换到根,再access(y)、splay(y),sum[y]就是答案。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using names 阅读全文
posted @ 2017-03-11 11:11 gjghfd 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 只有cut和link操作的LCT 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define N 10010 6 int i,j,k,x,y,n,m,f[N],ch[ 阅读全文
posted @ 2017-03-11 10:12 gjghfd 阅读(223) 评论(0) 推荐(0) 编辑
摘要: bzoj 4765 -- 分块+dfs序+树状数组: 考虑分块。将1~n分成sqrt(n)块,对每个点记录它在每个块中的祖先个数,修改一个点时枚举每一块修改。 查询[l,r]时如果一个块在[l,r]中,直接将其加入答案。显然只剩下O(sqrt(n))个点。求出树的dfs序,用树状数组维护就可以O(l 阅读全文
posted @ 2017-03-07 20:42 gjghfd 阅读(199) 评论(0) 推荐(1) 编辑
摘要: 考虑建一棵树,对于一个点i,如果i+ki<=n,将i+ki作为它的父亲。那么答案就是这个点的深度。 由于有修改操作,用LCT维护这棵树,每个修改操作改变父节点就可以了。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 阅读全文
posted @ 2017-03-07 16:18 gjghfd 阅读(165) 评论(0) 推荐(1) 编辑
摘要: 用并查集记录每个联通块的根节点,每个联通块建一棵线段树,合并时合并线段树就可以了。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define N 100010 6 阅读全文
posted @ 2017-03-04 08:47 gjghfd 阅读(190) 评论(0) 推荐(1) 编辑
摘要: 简单的斜率优化。 首先得到DP方程: f[i]=max(f[j]+a*(sum[i]-sum[j])2+b*(sum[i]-sum[j])+c),j<i 其中sum表示前缀和 设j比k优 f[j]+a*(sum[i]-sum[j])2+b*(sum[i]-sum[j])+c>f[k]+a*(sum[ 阅读全文
posted @ 2017-03-03 18:55 gjghfd 阅读(169) 评论(0) 推荐(1) 编辑