随笔分类 -  树形DP

hdu4705 Y 简单树形DP 2013多校训练第十场 J题
摘要:题意:求一棵树中不在一条链中的三个点的对数。转化一下,用总对数减去在一条链上的三点对数即可。考虑经过根节点,然后可能是不同的子树中各选一个;或者是子树中选一个,然后当前节点为根的子树以外的节点选一个。这样不重不漏代码简单。#define maxn 100005struct node{ int v,next;};node e[maxn * 2 ];int head[maxn];int cnt ;i64 ans ;i64 sum ;i64 sz[maxn];i64 n ;void init(){ memset(head,-1,sizeof(head)); cnt = 0 ;}void add... 阅读全文

posted @ 2013-08-22 21:29 oshixiaoxiliu 阅读(168) 评论(0) 推荐(0)

poj3417 Network 树形Dp+LCA
摘要:题意:给定一棵n个节点的树,然后在给定m条边,去掉m条边中的一条和原树中的一条边,使得树至少分为两部分,问有多少种方案。神题,一点也想不到做法,首先要分析出加入一条边之后会形成环,形成环的话,如果去掉该边和环上面没有被其他环覆盖的边,那么便分为两部分了。这样只需要记录每条边被环覆盖了几次即可,用dp[u]表示u点的父边被覆盖了几次。每次新加进来一条边(a,b) dp[a] ++ ,dp[b] ++ , dp[lca(a,b)] -= 2;所有边处理完之后,遍历一边此树,同时转移状态 dp[u] += dp[v];#define maxn 100005struct node{ int v,... 阅读全文

posted @ 2013-08-09 19:37 oshixiaoxiliu 阅读(213) 评论(0) 推荐(0)

导航