摘要: http://blog.csdn.net/gjghfd 阅读全文
posted @ 2017-05-25 21:28 gjghfd 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定n个数,构造一个序列,满足所有前缀积模m互不相等且不与n个数中任意一个相等。最大化序列长度。 将1~m-1每个数作为一个点,如果存在a,使得 i*a=j (mod m),那么从i向j连一条有向边。那么答案就是图中的最长路径。 又因为如果 i*a=j (mod m),则gcd(i,m) 阅读全文
posted @ 2017-05-25 21:02 gjghfd 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个森林,有若干个询问,每次询问在第i棵树中随机选一个点,在第j棵树中随机选一个点并将它们相连后树的直径的期望值。 对每棵树求出它的直径d,对每个点求出它到树上最远点的距离f,那么选择x、y点时树的直径就是: max(d[i],d[j],f[x]+f[y]+1) 对每棵树中点的f排序 阅读全文
posted @ 2017-05-25 20:45 gjghfd 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 显然我们一定是先走到AB上一点X,然后走到CD上一点Y,最后到D。 那么答案就是|AX|/P+|XY|/R+|YD|/Q 假设我们已经确定了X,那么目标就是在CD上找一点Y,使|XY|/R+|YD|/Q最小。 显然这是个单峰函数。 那么三分套三分就可以了。 代码: #include<iostream 阅读全文
posted @ 2017-05-19 17:02 gjghfd 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 直接复制gconeice的题解吧 显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 阅读全文
posted @ 2017-05-13 09:34 gjghfd 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一张有向图,求图中从1开始长度>=m且边数最少的路径经过的边数。 考虑倍增floyd。 令f[p][i][j]表示经过2p条边从i到j的最大长度。 那么f[p][i][j]=max{f[p-1][i][k]+f[p-1][k][j]} 令g[i][j]表示当前答案从i到j的最大长度。 求答 阅读全文
posted @ 2017-05-09 11:22 gjghfd 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 以下是Claris的题解: 若线段 i 和 j 相交,那么在它们之间连一条边。若这个图不是二分图,那么无解,否则令cnt 为连通块个数,那么 ans = 2cnt。 在二分图染色的过程中,每个点只需要被访问一次。对于当前所在的点 x,它可以一步走到 [1, x) 里 p[i] > p[x] 的所有 阅读全文
posted @ 2017-05-07 11:40 gjghfd 阅读(336) 评论(0) 推荐(1) 编辑
摘要: 先将权值离散。 显然可以对于每个结点建一棵权值线段树存这个点到根结点的路径上的点权,询问时在线段树上二分,但这样时间是O(n2log2n)的。 然后想到用主席树优化,时间复杂度O(n*log2n)。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #inc 阅读全文
posted @ 2017-05-04 17:36 gjghfd 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 题解:http://www.cnblogs.com/clrs97/p/6006305.html 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vecto 阅读全文
posted @ 2017-04-24 18:22 gjghfd 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 可持久化字典树模板题。。。 把每个数转换成二进制建立字典树,按照下标建立可持久化字典树,存一下子树中点的个数就行了。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 usi 阅读全文
posted @ 2017-04-24 11:22 gjghfd 阅读(260) 评论(0) 推荐(0) 编辑