题意:
给定一棵有根树,开始时每个节点有苹果;
有两种操作 C
x :使x节点的状态改变,有果子变成没有,没有就变成有;
Q x
:查询x节点子树上的果子总数;
n,m
题解:
范围显然不能爆搜,所以我们在求和的时候不能枚举;
可以想到用树状数组来维护和;
所以基本想法就是使子树们各自在一个区间上,然后树状数组维护;
制作这个区间就用dfs,回溯时正好记录了整棵子树的信息;...
分类:
移动开发 时间:
2015-04-30 16:16:43
阅读次数:
155
1、无根树转有根树
#include
#include
#include
#include
#define LL long long
#define INF 0x7fffffff
#include
using namespace std;
const int maxn = 1000005;
int p[maxn];
int n;
int root;
vector G[maxn];
...
分类:
其他好文 时间:
2015-04-15 09:44:26
阅读次数:
156
题意:求一棵边权全都是1的树上,集合大小为3,且集合内点两两距离相等的集合个数。NOIP2014 D1T2加强版。。通过分析发现,满足这样的点对一定是在有根树中深度相同,且不再同一棵以根节点儿子为根的子树中。于是我们枚举根。。三个点的集合个数是由2个点的集合个数转移过来的。。2个又是由一个转移过来的...
分类:
其他好文 时间:
2015-04-13 16:16:44
阅读次数:
170
引用题解:http://blog.csdn.net/popoqqq/article/details/38823457题目大意:给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。有...
分类:
其他好文 时间:
2015-03-18 07:46:44
阅读次数:
149
原题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801题意:给定一颗有根树,在树上下层的节点要给上层节点礼物,根节点的礼物则给慈善会,但是给礼物有个条件就是你不能送你的父节点已经送出的礼物。问满足要求的最少花费。
题解:这个题卡了一段时间,类似于染色问题,可以用树形动态...
分类:
其他好文 时间:
2015-03-14 23:16:48
阅读次数:
155
http://acm.hdu.edu.cn/showproblem.php?pid=2586给定一棵带权有根树,对于m个查询(u,v),求得u到v之间的最短距离那么只要求得LCA(u,v),dis(u,v)=dis[u]+dis[v]-2*dis[LCA(u,v)],其中dis[i]表示节点i到根节点root的距离31MS 4104K 2186 B#include
#i...
分类:
其他好文 时间:
2015-03-14 13:56:04
阅读次数:
136
1.题目描述:点击打开链接
2.解题思路:本题要求放置尽可能少的服务器,使得所有的客户端到最近的服务器的距离都不超过k。由于已经放置了一个服务器,不妨把它当做根结点,先把无根树转化为有根树,然后我们考虑最深的叶子,那么不难证明,该叶子结点的最优服务器的放置位置是它的k级祖先。这样本题的算法便不难想出:从最深的叶子开始枚举,并在它的k级祖先处放置一个服务器,同时标记该服务器能覆盖到的所有结点,这样...
分类:
其他好文 时间:
2015-03-14 09:40:44
阅读次数:
122
http://poj.org/problem?id=1330给一个有根树,一个查询节点(u,v)的最近公共祖先836K 16MS#include
#include
#include
#include
#include
#include
#include
#include<map...
分类:
其他好文 时间:
2015-03-13 12:43:43
阅读次数:
114
题目大意:给出一棵树,在某个选择某个结点可以覆盖和它相连的所有边,问最少选多少个结点所有边都被覆盖。
首先将无根树转化为有根树,0为根。
用d[i][0]表示不选择结点i时覆盖以结点i为根的子树最少要多少个结点,用d[i][1]表示选择结点i时覆盖以结点i为根的子树最少要多少个结点。若结点i不选,为了和覆盖所有和结点i相连的结点,则每个儿子都必须选,若结点i选,则每个儿子选择较小的那个...
分类:
其他好文 时间:
2015-03-10 10:31:14
阅读次数:
145
1.题目描述:点击打开链接
2.解题思路:本题让我长见识了。也学到了很多新的知识:LCA,多级祖先算法。如果只是单纯地将无根树转化为有根树,找到u,v的中点,再用BFS计算中线上结点的个数,那么最终会导致TLE。本题的高效算法如下:
首先求出以1为根的树的所有结点的总个数,保存在num数组中,再利用LCA算法求出u,v的公共祖先,设为LCA。找到u,v结点的中点mid.此时规定deep...
分类:
其他好文 时间:
2015-03-02 09:37:41
阅读次数:
120