
树形dp
_zidaoziyan
这个作者很懒,什么都没留下…
展开
-
一颗N个点的树,求每个点到其他所有点的路径长度异或K的总和
题意:一颗N个点的树,求每个点到其他所有点的路径长度异或K的总和。即ANSi=sum(distance(i,j) xor K){1Input第一行一个整数t,测试数据组数每组数据第一行两个整数N,K 如题述。(N然后N-1 行每行三个整数a,b,c 表示a 到b 有一条长为c 的边。 Output对于每组数据输出N行。第i 行为ANSi。 Sample In原创 2015-09-10 14:00:12 · 1928 阅读 · 0 评论 -
Hdu 5866 Lucky E(树上点期望的最大值)
传送门:Hdu 5866 Lucky E 题意:给你一棵树,有n个节点,m种操作,树上的每个点相当于一个士兵,有一个伤值, m中操作,每种操作都有一个点的标号和一个概率,表示可以对这个点的子树造成1点伤害, 求受伤最高的士兵的伤值的期望 题解:摘自http://www.cnblogs.com/duoxiao/p/5784466.html 考虑到操作数M较小而树较大,所以可以转载 2016-08-20 10:08:13 · 783 阅读 · 0 评论 -
uva 12093 Protecting Zonk(在某个节点X使用A装置,此时与节点X相连的边都被覆盖)
题意: 有一个n(n<=10000)个节点的无根树。有两种装置A,B,每种都有无限多个。 1.在某个节点X使用A装置需要C1(C1<=1000)的花费,并且此时与节点X相连的边都被覆盖 2.在某个节点X使用B装置需要C2(C2<=1000)的花费,并且此时与节点X相连的边以及与节点X相连的点相连的边都被覆盖 求覆盖所有边的最小花费 思路: dp[u][0]:u没有安装原创 2016-11-03 14:19:42 · 1049 阅读 · 2 评论 -
Codeforces Round #263 (Div. 1) B. Appleman and Tree(给一棵树,每个点为白色或黑色,切断一些边,使得每个连通块有且仅有一个黑点,问划分方案数。)
题意:给一棵树,每个点为白色或黑色,切断一些边,使得每个连通块有且仅有一个黑点,问划分方案数。(n<=1e5) 思路: dp[u][0]表示没有被包含在黑色连通块中 dp[u][1]表示被包含在黑色连通块中 dp[u][0]=dp[u][0]*dp[v][1]+dp[u][0]*dp[v][0] dp[u][1]=dp[u][0]*dp[v][1]+dp[u][1]*dp[原创 2016-11-03 14:21:16 · 1947 阅读 · 0 评论 -
AIM Tech Round 3 (Div. 1) C. Centroids(每个点能否删掉一条边再添加一条边使得这个点成为重心)
题意: 给你n个点的树(n<=4e5),对于每个点能否删掉一条边再添加一条边使得这个点成为重心(每一个子树的大小都小于等于n/2) 思路: 对于每个点u,判断有多少个子树的大小大于n/2 每个子树维护这个子树中节点数小于等于n/2的最大值,次大值以及它们对应的节点 向上和向下dp一下就可以了#include<bits/stdc++.h>using namespace原创 2016-11-03 21:02:41 · 596 阅读 · 0 评论 -
Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland(从每个点出发最小需要修改几条边的方向可以到达其它所有点,输出最小改变几)
题意: 有n个点的树(n<=2e5),每条边定向,问从每个点出发最小需要修改几条边的方向可以到达其它所有点,输出最小改变几条边, 以及对应点 思路: 先不给树定向,向下dfs,向上dfs判断#include<bits/stdc++.h>using namespace std;const int N=2e5+100;struct Edge{ int to,next,原创 2016-11-03 21:04:31 · 326 阅读 · 0 评论 -
Hdu 4008 Parent and son(给你一棵树(n<=1e5),有Q次查询,每次输入X Y,意思是以X为根,输出Y的儿子节点中节点标号最小和子树中标号最小)
题意: 给你一棵树(n<=1e5),有Q次查询,每次输入X Y,意思是以X为根,输出Y的儿子节点中节点标号最小和子树中标号最小 思路: 树形dp 先以1为根 处理出每个子树的最大值和次大值以及每个儿子节点对应的最大值和次大值 处理出每个点向上的最小值 以1建树就可以不用处理(Y等于1时需要特判) 处理出dfs序 分X的dfs在Y的dfs区间之内和原创 2016-11-03 21:06:45 · 1884 阅读 · 0 评论 -
UVALive 4015 Caves(树型dp)
题意:一颗有n个节点的有根树,有Q个查询,从根节点出发,走不超过x单元距离,最多能经过多少个节点,点可重复走(n<=500,Q<=1000) 思路: dp[u][k][flag]从u出发,经过k个点,是否回到u的距离的最小值 查询时暴力就可以#include<bits/stdc++.h>using namespace std;const int INF=0x3f3f3f3f;c原创 2016-11-02 20:20:26 · 338 阅读 · 0 评论