摘要: 【题解】 先建反向图,dfs求出哪些点可以到达终点。 再建正向图,dfs求出哪些点可以作为路径上的点。 最后在合法的点之间连边,跑dijkstra. 阅读全文
posted @ 2018-10-31 21:38 Driver_Lao 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 【题解】 树链剖分+线段树的模板题。每个点的点权是它父亲到它的边的边权,这样我们就完成了把边权变为点权的操作,之后直接树剖即可。 注意回答询问的时候要把lca(x,y)去掉,因为x到y的链上并不包含lca(x,y)到它的父亲的边。 阅读全文
posted @ 2018-10-31 19:54 Driver_Lao 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 【题解】 我们先从1到Max ai枚举Tab占几个空格,然后跳着统计答案。 跳着统计答案的意思是对于每个长度i,在值域上%i的循环节是i,所以我们把值域分成m/i个区间,一个个计算答案。这样复杂度是调和级数,也就是n*ln n的。 统计答案的时候可以用值域上的前缀和辅助。 阅读全文
posted @ 2018-10-31 15:15 Driver_Lao 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 【题解】 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解。 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u向vi连边。 连边之后我们跑拓扑排序,并且用堆维护当前入度为0的点中编号最小的,以此来让字典序最小。 阅读全文
posted @ 2018-10-31 15:02 Driver_Lao 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 【题意概述】 给出一棵树,树上的边有两个值a和b,你可以在[0,limit]范围内选择一个整数delta,树上的边的权值为a+b*delta,现在问当delta为多少的时候树的直径最小、最小直径是多少。 【题解】 每条边的边权都是一次函数,那么直径是单峰函数。单峰函数求最小值我们可以用三分法。 注意 阅读全文
posted @ 2018-10-31 14:42 Driver_Lao 阅读(209) 评论(0) 推荐(0) 编辑