随笔分类 -  树上分治

摘要:神似之前芜湖集训的一道题,但是比那道题简单。这个题最多加两条路,所以直接分类讨论。k=1找完直径后直接可以算,k=2就把原来直径权值附为-1(负负得正)之后求直径就行了。 ps:有负边的直径不能用dfs,得dp 题干: 代码: 阅读全文
posted @ 2019-02-24 21:59 DukeLv 阅读(169) 评论(0) 推荐(0)
摘要:这个题就是建图不太好建,但是我们一想,三角形貌似只能两两挨着,最后会变成一个二叉树,所以问题就变成求树的直径。建图用pair套map超级简单。 题干: 代码: 阅读全文
posted @ 2019-02-24 14:40 DukeLv 阅读(176) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2018-11-25 22:46 DukeLv 阅读(7) 评论(0) 推荐(0)
摘要:之前搞了一个树的中心,结果当时把点分治给扔下了,现在搞一搞。其实点分治的分治思想很明显,就是把树切成一个个小树,然后在重心的位置再分治就行了。 代码实现有一定困难,但就我觉得前一个函数和树刨的dfs1很像吗,详情见代码。 题干: 代码: 阅读全文
posted @ 2018-09-23 20:22 DukeLv 阅读(233) 评论(0) 推荐(0)
摘要:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. 首先要知道什么是树的重心,树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重 心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有 阅读全文
posted @ 2018-08-10 22:46 DukeLv 阅读(2094) 评论(0) 推荐(0)