摘要: 分析: 这是今天下午的考试题,推了2个小时,考试中A掉了 首先,循环串通过字符串hash可以O(1)判断:get_hash(l,r-len)==get_hash(l+len,r);显然可证。 我们其次可以发现,循环串的长度是所求串的长度的约数 之后我们可以发现,如果两个不同的子串是循环串,那么这两个 阅读全文
posted @ 2018-05-15 20:57 Winniechen 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 分析: Dijkstra求最短路树,在最短路树上进行操作,详情可见上一篇博客:http://www.cnblogs.com/Winniechen/p/9042937.html 我觉得这个东西不压行写出了有点丑...之后写了一个压行后更丑的... 附上压行后的代码: 阅读全文
posted @ 2018-05-15 20:46 Winniechen 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 分析: 树剖裸题,[Usaco2009 Jan]安全路经Travel 的简化版 剖开最短路树,遍历每一条没在最短路树上的边。 这种情况下,有且仅有u到v路径上,出来lca之外的点能够通过这条边到达,并且,路径长度为:dis[u]+dis[v]+val-dis[x];(dis[x]是从根到x的最短路长 阅读全文
posted @ 2018-05-15 20:41 Winniechen 阅读(251) 评论(0) 推荐(0) 编辑
摘要: A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598:牛跑步 求前K短路 因为A*算法我们每次用来向外拓展的是估价函数最小的点,那么,我们必定能够得到, 阅读全文
posted @ 2018-05-15 20:34 Winniechen 阅读(271) 评论(0) 推荐(1) 编辑
摘要: 分析:水题 每次安装的时候和根节点求lca的过程中区间覆盖+区间查询 每次删除的时候查询子树中安装的数量+区间覆盖 附上代码: 阅读全文
posted @ 2018-05-15 20:17 Winniechen 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 分析: 区间合并,lcol是左端点的颜色编号,rcol是右端点的颜色编号,那么我们向上合并的时候,如果左儿子的rcol等于右儿子的lcol那么区间的sum--。 另外,如果重链顶的颜色等于重链顶的父节点的颜色,那么ans--; 附上代码: 阅读全文
posted @ 2018-05-15 20:14 Winniechen 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 分析: 数据范围表示:c特别的小(c<20) 我们可以考虑nlogn*c^2的算法。 线段树维护区间信息:f[i]表示在[l,r]这段区间中选择i个数相乘的和。 因此,我们可以将区间看成一个点,在PushUp的时候用背包的方式更新父节点。(仔细观察发现这是卷积) 剩下的就是一些优化了... 附上代码 阅读全文
posted @ 2018-05-15 20:06 Winniechen 阅读(167) 评论(0) 推荐(0) 编辑