随笔分类 -  LCA 最近公共祖先

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)

导航