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 ...
随机推荐
- C#中Brush、Color、String相互转换WPF/Silverlight
//部分方法只适用于WPF,在SL中不能用 using System.Windows.Media; 1.String转换成Color Color color = (Color)ColorConvert ...
- apache php env build
from http://blog.csdn.net/yincg/article/details/8782364 1.1 系统说明Centos 6.2 (最小化安装)1.2 软件说明httpd-2.4. ...
- C++之路进阶——bzoj1934(善意的投票)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser hyxzc Logout 捐赠本站 Notice:由于本OJ建立在 ...
- Unity操作
聚焦到游戏物体: Hierarchy界面选中需要聚焦的物体,双击或者使用快捷键“F”: 在Scene面板中选中物体,使用快捷键“F” 放大缩小物体: alt+鼠标右键:鼠标滑轮 从各个角度观察 ...
- JetBrains WebStorm 安装破解问题
1.选择用户名验证码注册,进入地址:http://15.idea.lanyus.com/ 然后输入用户名,提交便会生成验证码,注册成功, 2.选择License server,输入以下地址: http ...
- 一种比较少见的C#代码段
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Openstack安全规则说明
openstack的安全规则,主要是在网络控制器,nova-network中进行的端口限制,所以我们需要对规则进行定制. 定制通用安全组规则 通用安全组规则主要包括2个,1是支持ping的icmp协议 ...
- "未能找到类型或命名空间名称",引用dll的时候出错
当前项目是.net2.0框架,引用的dll是 .net 4.5框架,引用后编译时报错“未能找到类型或命名空间名称”. 当前项目 右键-->应用程序-->目标框架 改为 .net frame ...
- maven nexus
部署nexus步骤: 1.下载解压安装包到指定目录 2.设置环境变量(当然还有JAVA,jdk) 3.在配置文件(G:\nexus\nexus-2.3.1-01-bundle\nexus-2.3.1- ...
- 如何利用.snk文件生成DLL文件中的Publickeytoken
1.在该路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin查找是否有sn.exe. 没有的话,从网上下载,注意需要的版本. 2.打开c ...