摘要: 题面解题思路人生第一次接触仙人掌树,仙人掌树的直径,实际上就是将很多基环树结合。f[x]表示以x为根的节点的最大深度,tarjan的目的就是求出桥,用来更新每个环的父亲的f数组与整个的ans。求出环后因为可以从环上的任意一点更新环的父亲,所以要用双端队列优化... 阅读全文
posted @ 2018-07-06 23:42 Monster_Qi 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 题面解题思路树的直径模板,用树形dp来求,dp[x]表示以x为端点的最大子链长度,d[x]=max(d[y]) (y是x的后继)代码#include#include#includeusing namespace std;const int MAXN = 10... 阅读全文
posted @ 2018-07-06 21:23 Monster_Qi 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题面 解题思路 因为m太大,不能直接暴力,我们考虑构图。如果(x|(1<< i))&k=0,那么一定有x&k=0,这是一个传递关系,而x|(1<< i)正是x的子集,我们将x向x|(1<< i)连边。又因为x&(~x)一定=0,所以将输入的数据向其取反连边,则可以通过这个关系构成一张图。之后用dfs 阅读全文
posted @ 2018-07-06 20:52 Monster_Qi 阅读(1065) 评论(0) 推荐(0) 编辑
摘要: 题面解题思路多源bfs,设dis[i][j] 设i点能获得j货物的最小长度。以每个货物跑一次bfs,更新每个点的dis值。时间复杂度理论上是nk,我貌似写成了nk(n/k),但还是过了。代码#include#include#include#include#i... 阅读全文
posted @ 2018-07-06 20:23 Monster_Qi 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 题面题目大意给定一棵树,要求划分出几条链,使这几条链交于一点。解题思路因为所有链都要交于一点,所以必须交于一个度数最多的点。这样就形成了一个菊花形。然后从这个点出发到它的子树,判断子树的度数是否小于等于2,如果不是,则不成立。代码#include#inclu... 阅读全文
posted @ 2018-07-06 19:49 Monster_Qi 阅读(193) 评论(0) 推荐(0) 编辑