.....是我多想了。

我想开f[][0~3],看到百度上的题解都是[0~2]的,我就改了

方程不是特别难想。。

f代表最小代价

f[i][0]是子树有环过i

f[i][1]是子树除了i都成环了

f[i][2]是子树有条链过i(最少2个点,包括i)

转移见代码(有状态了转移很好想)。

/**
* Problem:POJ1848
* Author:Shun Yao
* Time:2013.9.2
* Result:Accepted
* Memo:TreeDP
*/ #include <cstdio> #define MAXN 110
#define inf 1000 long f[MAXN][3]; long min(long x, long y) {
return x < y ? x : y;
} class Edge {
public:
long v;
Edge *next;
Edge() {}
~Edge() {}
Edge(long V, Edge *ne) : v(V), next(ne) {}
} *g[MAXN]; void add(long x, long y) {
g[x] = new Edge(y, g[x]);
g[y] = new Edge(x, g[y]);
} void dp(long i, long pa) {
long sum;
Edge *e;
sum = 0;
for (e = g[i]; e; e = e->next)
if (e->v != pa) {
dp(e->v, i);
sum += f[e->v][0];
}
f[i][2] = inf;
f[i][0] = inf;
f[i][1] = sum;
if (g[i]->v == pa && !g[i]->next)
return;
static long x, y, z;
x = inf;
y = inf;
for (e = g[i]; e; e = e->next)
if (e->v != pa) {
f[i][2] = min(f[i][2], f[e->v][1] - f[e->v][0]);
f[i][2] = min(f[i][2], f[e->v][2] - f[e->v][0]);
f[i][0] = min(f[i][0], f[e->v][2] - f[e->v][0]);
z = min(f[e->v][1], f[e->v][2]) - f[e->v][0];
if (x > z) {
y = x;
x = z;
} else if (y > z)
y = z;
}
f[i][2] += sum;
if (y < inf)
f[i][0] = min(f[i][0], x + y);
f[i][0] += sum + 1;
} int main() {
static long n, i, u, v; #ifndef ONLINE_JUDGE
freopen("poj1848.in", "r", stdin);
freopen("poj1848.out", "w", stdout);
#endif scanf("%ld", &n);
for (i = 1; i < n; ++i) {
scanf("%ld%ld", &u, &v);
add(u, v);
}
dp(1, 0);
if (f[1][0] >= inf)
printf("-1");
else
printf("%ld", f[1][0]); fclose(stdin);
fclose(stdout);
return 0;
}

poj1848 Tree的更多相关文章

  1. POJ1848 Tree 【树形dp】

    题目链接 POJ1848 题解 由题,一个环至少由三个点组成,一个点作为根时,可以单独成链,可以与其一个儿子成链,或者与其两个儿子成环,与其一个剩余链长度大于等于2的儿子成环. 那么我们设最小代价 \ ...

  2. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  3. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  4. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  5. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  6. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  7. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  8. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  9. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

随机推荐

  1. uva 10154

    dp  记忆化搜索 做的时候像dfs  #include <iostream> #include <cstring> #include <cstdio> #incl ...

  2. 看几道JQuery试题后总结(下篇)

    感谢圆友的提醒 昨天下午完成了9道试题中的前4道,之后好多园友存在些疑惑和建议,在这里我一并说一下吧.首先对于昨天第一题可能存在误导,在JQuery中并没有innerHTML这个属性,不过我们可以将J ...

  3. Android Activity的切换动画

    Android的Activity切换有两种方法, 第一种是用代码方式实现: Activity A跳转到Activity B,要在startActivity(intent)后面加上overridePen ...

  4. 多线程 (五)NSOperation

    NSOperation是对GCD的分装,OC语言,更简单方便 NSOperation和NSOperationQueue一起使用也能实现多线程编程 基本步骤: 将操作封装到一个NSOperation对象 ...

  5. Ubuntu Telnet 配置(openbsd-inetd)

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.可以通过Telnet实现远程登录Ubuntu,但是Ubuntu 10.10默认没有安装Telnet,需 ...

  6. 中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2718 题意:优先直走,右 左 后.... ...

  7. poj12月其他题解(未完)

    最近编程的时间比较少啊…… poj3253 就是个合并果子,各种优先队列即可(显然单调队列最优) poj3263 线段树统计每个点被覆盖了多少次即可,注意要去重 poj3625 最小生成树 poj36 ...

  8. tyvj1519博彩游戏

    博彩游戏 From admin 背景 Background Bob最近迷上了一个博彩游戏…… 描述 Description 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到 ...

  9. 各种兼容的placeholder

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  10. uboot环境变量与内核MTD分区关系

    uboot 与系统内核中MTD分区的关系: 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 1:在内核MTD中可以定义分区A~B, ...