随笔分类 -  算法--点分治

摘要:题目链接:https://vjudge.net/problem/HDU-5909 题意:给一颗树,结点带权值v[i]<m。求异或和为k的子树个数(0<=k<m)。 思路: 首先点分治处理一颗树,跑一遍dfs得到该树的dfs序。然后我们用序列dp来做,用dp[i][j]表示必须包括重心,处理序列中第i 阅读全文
posted @ 2019-08-25 15:42 Frank__Chen 阅读(224) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-5977 题意:给一颗树,每个结点上有一个权值a[i],a[i]<=10,求有多少条路径满足这条路径上所有权值的结点都出现了。 思路: 首先利用二进制的思想,将a[i]转化为1<<(a[i]-1)。我们在子树中,计算出结点到重心 阅读全文
posted @ 2019-08-24 11:56 Frank__Chen 阅读(175) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/HDU-4812 题意:给定一颗带点权的树,求是否存在一条路经的上点的权值积取模后等于k,如果存在多组点对,输出字典序最小的。 思路: 点分治模板题。按照套路,找重心,求出子树中节点到重心的权值积取模后的值dis[i](包括重心的权值, 阅读全文
posted @ 2019-08-21 21:58 Frank__Chen 阅读(201) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problem/P2664 题意:给定一颗带点权的树,结点数n<=1e5,点权<=1e5,用s(i,j)表示从i到j的路径上不同点权数,ans[i]=sum(s(i,j))。求ans数组。 思路: 继续肝淀粉质,太难了。 涉及到树上点对,且nlo 阅读全文
posted @ 2019-08-21 16:23 Frank__Chen 阅读(156) 评论(0) 推荐(0)
摘要:题目链接:https://www.luogu.org/problem/P2634 题意:给一颗树,求距离的模3为0的点对数量,注意(1,1)算一个点对,(1,2)和(2,1)算两个点对。 思路:和点分治模板题很像,那个是求距离为k的点对数,这题更简单一点,求距离模3为0的点对数。还是一般的套路,求重 阅读全文
posted @ 2019-08-20 16:39 Frank__Chen 阅读(152) 评论(0) 推荐(0)
摘要:题目链接:https://vjudge.net/problem/POJ-1741 题意:给出一棵树,求出树上距离不超过k的点对数量。 思路:点分治经典题。先找重心作为树根,然后求出子树中所有点到重心的距离dis[i],那么所有组合为dis[i]+dis[j]<=k,其中不合法组合为在重心的同一个子树 阅读全文
posted @ 2019-08-20 11:57 Frank__Chen 阅读(442) 评论(0) 推荐(0)
摘要:点分治的写法1: 题目链接:https://www.luogu.org/problem/P3806 题意:给出一颗带边权的树,结点数n<=1e4,每条边有权值<=1e4,有m组询问(m<=100),每组询问为一个k,表示是否存在一条路经长度为k,存在输出AYE,不存在输出NAY。 思路:点分治模板题 阅读全文
posted @ 2019-08-20 10:38 Frank__Chen 阅读(130) 评论(0) 推荐(0)