poj1192 最优连通子集(树形dp)
题目链接:poj1192 最优连通子集
求一棵无向树的最大子树和。。类似于求最大子段和的办法,树形dp。
dp[i][0]:以i为根,不包括 i 结点的子树最大权
dp[i][1]:以i为根,包括 i 结点的子树的最大权
dp[i][0] = max(dp[j][0] , dp[j][1]) (j 为 i 的儿子)
dp[i][1] += dp[j][1] (dp[j][1] > 0,j 为 i 的儿子)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define CLR(a,b) memset((a),(b),sizeof((a)))
using namespace std;
const int N = ;
const int inf = 0x3f3f3f3f;
int n, cnt;
int dp[N][];
int head[N];
bool vis[N];
struct edge{
int nex, to;
}e[N*N];
struct point{
int x, y, c;
}p[N];
void add(int u, int v){
e[cnt].to = v;
e[cnt].nex = head[u];
head[u] = cnt++;
}
void dfs(int u){
vis[u] = ;
dp[u][] = ; dp[u][] = p[u].c;
for(int i = head[u]; ~i; i = e[i].nex){
int v = e[i].to;
if(!vis[v]){
dfs(v);
dp[u][] = max(dp[u][], max(dp[v][], dp[v][]));
if(dp[v][] > )
dp[u][] += dp[v][];
}
}
}
int main(){
int i, j, ans;
scanf("%d", &n);
CLR(head, -); CLR(dp, ); CLR(vis, );
cnt = ;
for(i = ; i <= n; ++i){
scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].c);
for(j = ; j < i; ++j){
if(abs(p[i].x - p[j].x) + abs(p[i].y - p[j].y) == ){
add(i, j); add(j, i);
}
}
}
dfs();
ans = max(dp[][], dp[][]);
printf("%d\n", ans);
return ;
}
poj1192 最优连通子集(树形dp)的更多相关文章
- POJ1192最优连通子串----树形dp
中文题面,目的很明显,把相邻的两个点看成是两个点之间有一条边,就能当成树形dp来做了. 用一遍dfs可以找出最大的子树权值和. #include<iostream> #include< ...
- poj 1192最优连通子集(简单树形dp)
题目链接:http://poj.org/problem?id=1192 #include<cstdio> #include<cstring> #include<iostr ...
- ACM/ICPC 之 树形DP(POJ1192)
将某点看做根状态,邻接点看做子状态,由子状态向根状态转移. POJ1192-最优连通子集 题解:将每一个点分成两个状态进行保存,因此可以构造一个数组dp[i][2]. dp[i][0]:不包括该点权值 ...
- 树形动态规划(树形DP)入门问题—初探 & 训练
树形DP入门 poj 2342 Anniversary party 先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上 ...
- poj 1192(树形DP)
最优连通子集 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2589 Accepted: 1382 Descriptio ...
- HDU4612(Warm up)2013多校2-图的边双连通问题(Tarjan算法+树形DP)
/** 题目大意: 给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 算法思想: 图的边双连通Tarjan算法+树形DP; 即通过Tarjan算法对边双连通缩图,构成一棵树,然后用树形DP求 ...
- HDU 2242 考研路茫茫—空调教室 (边双连通+树形DP)
<题目链接> 题目大意: 给定一个连通图,每个点有点权,现在需要删除一条边,使得整张图分成两个连通块,问你删除这条边后,两联通块点权值和差值最小是多少. 解题分析: 删除一条边,使原连通图 ...
- hdu 4612 Warm up 双连通+树形dp思想
Warm up Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...
- 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
由于圆不存在相交的关系 所以包容关系形成了树的形态 其实是一个森林 不过加一个0点 就变成了树. 考虑对于每个圆都求出最近的包容它的点 即他的父亲.然后树形dp即可.暴力建图n^2. const in ...
随机推荐
- RDIFramework.NET 框架之组织机构权限设置
RDIFramework.NET 框架之组织机构权限设置 对于某些大型的企业.信息系统,涉及的组织机构较多,模块多.操作权限也多,对用户或角色一一设置模块.操作权限等比较繁琐.我们可以直接对某一组织机 ...
- [推荐] WordPress主题使用Google Fonts字体访问不了的解决办法
外国人做的WordPress主题喜欢带上Google的字体,但到了咱天朝是没法访问fonts.googleapis.com的 现有数字公司出的公共资源库可以替换,把fonts.googleapis.c ...
- NULLIF()函数使用讲解
NULLIF()函数接受两个参数.如果它们相等,那么返回空值:否则,返回第一个参数. 等价于下面的表达式: case when expression1=expression2 then null el ...
- ReentrantReadWriteLock读写锁详解
一.读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁.在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源:但是如果一个线 ...
- java-EL
语法 ¥{} 运算符 算数 加+.减-.乘*.除/.模% 比较 大于>.小于<.等于==.不等于!=.empty(判断是否为空,空位true,非空为false)(null 未实例化,&qu ...
- HTML5 Canvas arc()函数//////////////////////(转)
HTML5 Canvas arc()函数 实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.get ...
- IPC
IPC,全名Inter Process Communication即进程间通讯,在同一台机器上的两个进程就用IPC,不能跨物理机器。IPC包括共享内存、队列、信号量等几种方式,由于IPC通讯效率之高, ...
- Deferred解决JS同步问题
测试脚本: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- 清除dns缓存
Linux清除dns缓存命令 /etc/init.d/dnsmasq restart
- App.xaml
<Application x:Class="HelloWorld.App" xmlns="http://schemas.microsoft.com/winfx/20 ...
