随笔分类 -  树--树分治

摘要:题意:给一棵树每条边有a,b两个值,给你一个m,表示从0到m 1,假设当前为i,那么每条边的权值是a i+b,求该树任意两点的最大权值 题解:首先我们需要维护出(a,b)的凸壳,对于每个i在上面三分即可,点对用树分治维护,假设当前重心是u,那么把u的直接儿子挨个合并凸壳,这一过程用闵可夫斯基和维护, 阅读全文
posted @ 2019-03-28 19:40 walfy 阅读(144) 评论(0) 推荐(0)
摘要:sb树分治 / Problem: 2152 User: walfy Language: C++ Result: Accepted Time:472 ms Memory:3720 kb / // pragma comment(linker, "/stack:200000000") // pragma 阅读全文
posted @ 2018-06-30 14:39 walfy 阅读(205) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4812 题意:有一棵树,每个点有一个权值要求找最小的一对点,路径上的乘积mod1e6+3为k 题解:点分治,挨个把子树更新,每次把子树和现有的map里找满足条件的点对,然后更新子树到map里,map维护的是每个到根 阅读全文
posted @ 2018-05-27 16:15 walfy 阅读(173) 评论(0) 推荐(0)
摘要:题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vector,数组等各种,最后用数组,绝望的把memset改成for就过了。 学到一个新的点:如果我们调用了 阅读全文
posted @ 2017-11-11 00:33 walfy 阅读(264) 评论(0) 推荐(0)
摘要:题意:有一棵树,每条边有一个距离,求dis(u,v)<=k的点的对数 题解:树分治,对于一颗树上的两点,要么在同一颗子树上,要么在不同子树上,要么一个点是根,另一个在某一子树上,对于第一种情况我们可以通过递归来变成第二种或者第三种情况。我们对于某一颗子树来说我们先统计dis[u]+dis[v]<=k 阅读全文
posted @ 2017-11-10 16:01 walfy 阅读(207) 评论(0) 推荐(0)