BZOJ4472 JSOI2015salesman(树形dp)
相当于选一个包含根的连通块使权值和最大,且每个点的儿子选取数量有限制。那么显然贪心的在所有子树中选比较大的就可以了。至于方案是否唯一只需要看选的子树是否可以替换,注意dp值为0的情况。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
int n,a[N],b[N],p[N],f[N],t,q[N];
bool flag[N];
struct data{int to,nxt;
}edge[N<<];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
bool cmp(const int&a,const int&b)
{
return f[a]>f[b];
}
void dfs(int k,int from)
{
f[k]=a[k];
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) dfs(edge[i].to,k);
int cnt=;
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from) q[++cnt]=edge[i].to;
sort(q+,q+cnt+,cmp);
for (int i=;i<=min(cnt,b[k]);i++)
if (f[q[i]]<) break;
else f[k]+=f[q[i]],flag[k]|=flag[q[i]]||f[q[i]]==;
if (cnt>b[k]&&f[q[b[k]]]>=&&f[q[b[k]]]==f[q[b[k]+]]) flag[k]=;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4472.in","r",stdin);
freopen("bzoj4472.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<=n;i++) b[i]=read()-;b[]=n;
for (int i=;i<n;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
dfs(,);
cout<<max(f[],)<<endl;
if (f[]==) flag[]=;
cout<<(flag[]?"solution is not unique":"solution is unique");
return ;
}
BZOJ4472 JSOI2015salesman(树形dp)的更多相关文章
- 【BZOJ4472】salesman(树形DP)
		
题意: 给定一颗有点权的树,每个树上的节点最多能走到lim[u]次,求一条路径,使路径上的点权和最大,每个节点上的点权如果走了多次只能算一次.还要求方案是否唯一. 思路:每个点只能取lim[u]-1个 ...
 - bzoj4472: [Jsoi2015]salesman(树形dp)
		
Description 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收益.这些净收益可 ...
 - [bzoj4472][树形DP] Salesman
		
题目 原地址 解说 刚看完这道题感觉还是挺乱的,可能那时候脑子不太清醒,一度觉得自己又要重拾Tarjan了.当然最后还是发觉应该用树形DP. (以下dp[u]代表以u为根的包括自己在内的子树的最大利润 ...
 - 【树形DP】JSOI BZOJ4472 salesman
		
题目内容 vjudge链接 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些 ...
 - poj3417 LCA + 树形dp
		
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
 - COGS 2532. [HZOI 2016]树之美 树形dp
		
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
 - 【BZOJ-4726】Sabota?       树形DP
		
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
 - 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
		
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
 - 树形DP
		
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
 - BZOJ 2286 消耗战 (虚树+树形DP)
		
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...
 
随机推荐
- 编译安装GCC
			
下载GCC包 http://mirror.hust.edu.cn/gnu/gcc/ 解压 .tar.gzcd gcc-4.9.4./contrib/download_prerequisites #下载 ...
 - vue服务端渲染添加缓存
			
缓存 虽然 Vue 的服务器端渲染(SSR)相当快速,但是由于创建组件实例和虚拟 DOM 节点的开销,无法与纯基于字符串拼接(pure string-based)的模板的性能相当.在 SSR 性能至关 ...
 - Docker(二):Hello World
			
Docker 安装 这里以CentOS7 为例,其他安装教程可以自行通过其他路径了解. Docker 运行在CentOS7 上要求,系统为64位.系统内核版本为3.10以上. Docker 运行在 C ...
 - Python的Bottle框架中实现最基本的get和post的方法的教程
			
这篇文章主要介绍了Python的Bottle框架中实现最基本的get和post的方法的教程,Bottle框架在Python开发者中的人气很高,需要的朋友可以参考下 1.GET方式: # -*- cod ...
 - 爬虫之requests模块基础
			
一.request模块介绍 1. 什么是request模块 - python中原生的基于网络请求的模块,模拟浏览器发起请求. 2. 为什么使用request模块 - urllib需要手动处理url编码 ...
 - C# 实现程序开机自启动
			
最近在做一个自动备份文件的小工具,需要用到开机自启动 下面是代码 private void checkBox8_CheckedChanged(object sender, EventArgs e) { ...
 - Python自动化运维——文件与目录差异对比
			
Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:filecmp 安装:Python版本大于等于2.3默认自带 功能:实现文件.目录.遍历子目录的差异 常用方 ...
 - R语言学习笔记(九):fivenum()与quantile()
			
fivenum() fivenum(x, na.rm = TRUE) x 为数值型向量,可以包含NA以及Inf,-Inf na.rm = TRUE 默认将NA和NaN去除,但是Inf还保留. five ...
 - Java RMI 入门指南
			
开通博客也有好些天了,一直没有时间静下心来写博文,今天我就把两年前整理的一篇关于JAVA RMI入门级文章贴出来,供有这方面需要的同学们参考学习. RMI 相关知识 RMI全称是Remote Meth ...
 - html页面导出word文档
			
1.加入两个外部js 1)FileSaver.js /* FileSaver.js * A saveAs() FileSaver implementation. * 1.3.2 * 2016-06-1 ...