SPOJ 1435 Vertex Cover 树形DP
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的更多相关文章
- SPOJ 1435 - Vertex Cover(树形DP,树的最小点覆盖)
算是个经典题目了,很模板的树形DP题目 做这个题的时候一开始就想到树形DP了,可是由于各种原因没写出来,代码太糟烂了,赛后还是改了好久才过的 dp(u,0)=sum(dp(v,1)): dp(u,1) ...
- SPOJ PT07X Vertex Cover
题目意思: 一棵树,找到最少的点能覆盖到所有的边,(也就是每条边俩端 至少有一个在你找到的集合): 解法:每条边只能被俩个点中的一个,或全部覆盖所以我们有树形DP来解: DP[num][flag]// ...
- 【BZOJ2616】SPOJ PERIODNI 笛卡尔树+树形DP
[BZOJ2616]SPOJ PERIODNI Description Input 第1行包括两个正整数N,K,表示了棋盘的列数和放的车数. 第2行包含N个正整数,表示了棋盘每列的高度. Output ...
- BZOJ2616 SPOJ PERIODNI(笛卡尔树+树形dp)
考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树.那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是 ...
- SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp
题意:求一颗无向树的最小点覆盖. 本来一看是最小点覆盖,直接一下敲了二分图求最小割,TLE. 树形DP,叫的这么玄乎,本来是线性DP是线上往前\后推,而树形DP就是在树上,由叶子结点状态向根状态推. ...
- codeforces 709E E. Centroids(树形dp)
题目链接: E. Centroids time limit per test 4 seconds memory limit per test 512 megabytes input standard ...
- 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 ...
- 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 ...
- HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价
Information Disturbing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/ ...
随机推荐
- 记一次Surface Pro 2还原操作
因为要做Azure的一个case,对自己的域环境下直接进行了捕获.结果导致机器直接crash. 重启后使用本地账号登陆后发现所有Win 8 的App都无法使用,包括进入设置中还原方式也无法使用. 可以 ...
- Eclipse 下 opennms 开发环境搭建
1.eclipse3.5或更高版本,并且使用纯净的java版.下载地址:Eclipse for Java Developers. 2.安装需要的插件.通过Help/Install New Softwa ...
- ES5中的有9个Array方法
Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array ...
- cocos2dx中的用户数据的管理
提供了专门的类:CCUserDefault用来管理,且提供了单例方法:sharedUserDefault() 1.会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.w ...
- java synchronized(一)
java synchronized主要用于控制线程同步,中间有很多小的细节,知识,这里我简单的整理一下,做个记录.主要用于方法和代码块的控制 先说说方法控制 模拟银行存款和取款,创建一个Account ...
- 音频播放、录音、视频播放、拍照、视频录制-b
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- 阿里云服务器上安装mysql的心路历程(博友们进来看看哦)
在阿里云花了100买了一台云服务器,配置如下: CPU: 1核 内存: 512MB 数据盘: 0G 带宽: 1Mbps 阿里云服务器安装mysql搞得我想吐血,搞了一个多星期,现在才搞好,而且,还有许 ...
- IIS 分析器错误消息: 未能加载类型“_Default”
还会出现不能加载程序集,如: using Model;using BLL; 均报错 但是在vs2012 iis express中调试正常, 按照网上方法: 我将vs web项目下的目录全部cop ...
- Codeforces Round #347 (Div. 2) C. International Olympiad 找规律
题目链接: http://codeforces.com/contest/664/problem/C 题解: 这题最关键的规律在于一位的有1989-1998(9-8),两位的有1999-2098(99- ...
- 为什么数据可以从pl/sql查出来而使用ado.net查询,结果却是空?
1.背景 一条记录(如select * from A where a='1'),使用pl/sql作为条件可以查询出记录,但用ado.net sql查询结果却是空. 2.原因 a字段的数据类型的char ...