i 表示节点 i ,j=0表示不选择其父节点,j=1表示选择其父节点。f 为其父节点。

取 每个节点选择/不选择 两者中较小的那个。

一组数据:

15
1 2
1 3
1 4
1 10
10 9
10 11
12 10
12 14
10 13
13 15
4 5
5 7
4 6
6 8

答案是6

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector> using namespace std; const int MAXN = ; vector<int> adj[MAXN];
bool vis[MAXN][];
int d[MAXN][];
int n, m;
//int path[MAXN][2];
//int fang[MAXN]; int dp( int i, int j, int f )
{
if ( vis[i][j] ) return d[i][j];
vis[i][j] = true;
int &ans = d[i][j]; ans = ;
for ( int k = ; k < (int)adj[i].size(); ++k )
if ( adj[i][k] != f ) ans += dp( adj[i][k], , i );
//path[i][j] = f; if ( j || f < )
{
int sum = ;
for ( int k = ; k < (int)adj[i].size(); ++k )
if ( adj[i][k] != f )
sum += dp( adj[i][k], , i );
if ( sum < ans )
{
ans = sum;
//path[i][j] = -f;
}
}
return ans;
} //void DFS( int i, int j, int f )
//{
// if ( fang[i] != -1 ) return;
// if ( !path[i][j] || path[i][j] == f )
// {
// if ( f >= 0 ) fang[f] = j;
// for ( int k = 0; k < (int)adj[i].size(); ++k )
// if ( adj[i][k] != f ) DFS( adj[i][k], 1, i );
// }
// else
// {
// if ( f >= 0 ) fang[f] = j;
// for ( int k = 0; k < (int)adj[i].size(); ++k )
// if ( adj[i][k] != f ) DFS( adj[i][k], 0, i );
//
// }
// return;
//} int main()
{
while ( ~scanf( "%d", &n ) )
{
m = n - ;
for ( int i = ; i <= n; ++i ) adj[i].clear(); for ( int i = ; i < m; ++i )
{
int a, b;
scanf( "%d%d", &a, &b );
adj[a].push_back(b);
adj[b].push_back(a);
} memset( vis, false, sizeof(vis) );
//memset( fang, -1, sizeof(fang) );
//memset( path, 0, sizeof(path) ); int ans = dp( , , - );
printf( "%d\n", ans );
}
return ;
}

SPOJ 1435 Vertex Cover 树形DP的更多相关文章

  1. SPOJ 1435 - Vertex Cover(树形DP,树的最小点覆盖)

    算是个经典题目了,很模板的树形DP题目 做这个题的时候一开始就想到树形DP了,可是由于各种原因没写出来,代码太糟烂了,赛后还是改了好久才过的 dp(u,0)=sum(dp(v,1)): dp(u,1) ...

  2. SPOJ PT07X Vertex Cover

    题目意思: 一棵树,找到最少的点能覆盖到所有的边,(也就是每条边俩端 至少有一个在你找到的集合): 解法:每条边只能被俩个点中的一个,或全部覆盖所以我们有树形DP来解: DP[num][flag]// ...

  3. 【BZOJ2616】SPOJ PERIODNI 笛卡尔树+树形DP

    [BZOJ2616]SPOJ PERIODNI Description Input 第1行包括两个正整数N,K,表示了棋盘的列数和放的车数. 第2行包含N个正整数,表示了棋盘每列的高度. Output ...

  4. BZOJ2616 SPOJ PERIODNI(笛卡尔树+树形dp)

    考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树.那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是 ...

  5. SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp

    题意:求一颗无向树的最小点覆盖. 本来一看是最小点覆盖,直接一下敲了二分图求最小割,TLE. 树形DP,叫的这么玄乎,本来是线性DP是线上往前\后推,而树形DP就是在树上,由叶子结点状态向根状态推. ...

  6. codeforces 709E E. Centroids(树形dp)

    题目链接: E. Centroids time limit per test 4 seconds memory limit per test 512 megabytes input standard ...

  7. CF 461B Appleman and Tree 树形DP

    Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...

  8. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)

    题目链接 D. Appleman and Tree time limit per test :2 seconds memory limit per test: 256 megabytes input ...

  9. HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价

    Information Disturbing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/ ...

随机推荐

  1. SQLserver行转列与列转行

    行表: 行表 姓名 属性 属性值 JACK 身高 180 JACK 体重 80 JACK 年龄 27 TOM 身高 164 TOM 体重 59 TOM 年龄 20 列表: 列表 姓名 身高 年龄 体重 ...

  2. 一段Android里面打印CallStatck的代码

    public void dumpCallStack() { java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllSta ...

  3. php中函数内使用static修饰变量

    首先理解静态变量的区别,声明一个函数test() function num(){ $a = 0; echo $a; $a++; } num();num();num(); //输出000 functio ...

  4. java & xml parser

    参考: JDK8 API: http://docs.oracle.com/javase/8/docs/api/ DOM: http://www.w3.org/TR/2004/REC-DOM-Level ...

  5. C预处理,条件编译

    预处理是指在编译器之前运行,常以“#”开头 包含3个方面的内容: 1)宏定义与宏替换 2)文件包含 3)条件编译 宏定义与宏替换: 宏名一般大写,替换发生在编译之前,且是机械替换,不做语法检查,也不分 ...

  6. ACCESS数据库C#操作类(包含事务)

    转自http://blog.csdn.net/allen3010/article/details/6336717 这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的 ...

  7. IP地址格式控制

    /// <summary> /// 验证IP格式是否输入正确 /// </summary> /// <param name="ip"></ ...

  8. ios开发之多线程资源争夺

    上一篇介绍了常用的多线程技术,目前开发中比较常用的是GCD,其它的熟悉即可.多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用率来提高系统的整体性能,但是会出现多个线程对同一资源 ...

  9. LA 4384

    扩展欧几里得 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  10. Http、tcp、Socket连接区别

    转自Http.tcp.Socket连接区别 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Sock ...