bzoj 3743: [Coci2015]Kamp【树形dp】
两遍dfs一遍向下,一边向上,分别记录子树内人数a,当前点到所有点的距离b,最大值c和次大值d,最大值子树p
然后答案是2b-c
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1000005;
int n,m,h[N],cnt,p[N];
long long a[N],b[N],c[N],d[N];
bool v[N];
struct qwe
{
int ne,to,va;
}e[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v,int w)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
e[cnt].va=w;
h[u]=cnt;
}
void dfs1(int u,int fa)
{
if(v[u])
a[u]=1;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
{
dfs1(e[i].to,u);
a[u]+=a[e[i].to],b[u]+=b[e[i].to];
if(a[e[i].to])
{
b[u]+=e[i].va;
if(c[e[i].to]+e[i].va>=c[u])
d[u]=c[u],c[u]=c[e[i].to]+e[i].va,p[u]=e[i].to;
else if(c[e[i].to]+e[i].va>=d[u])
d[u]=c[e[i].to]+e[i].va;
}
}
}
void dfs2(int u,int fa)
{
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
{
b[e[i].to]=b[u];
if(a[e[i].to]==0)
b[e[i].to]+=e[i].va;
if(a[e[i].to]==m)
b[e[i].to]-=e[i].va;
long long nw=(e[i].to==p[u]?d[u]:c[u])+e[i].va;
if(nw>=c[e[i].to])
d[e[i].to]=c[e[i].to],c[e[i].to]=nw,p[e[i].to]=0;
else if(nw>=d[e[i].to])
d[e[i].to]=nw;
dfs2(e[i].to,u);
}
}
int main()
{
n=read(),m=read();
for(int i=1;i<n;i++)
{
int x=read(),y=read(),z=read();
add(x,y,z),add(y,x,z);
}
for(int i=1;i<=m;i++)
{
int x=read();
v[x]=1;
}
dfs1(1,0);
dfs2(1,0);
for(int i=1;i<=n;i++)
printf("%lld\n",b[i]*2-c[i]);
return 0;
}
bzoj 3743: [Coci2015]Kamp【树形dp】的更多相关文章
- bzoj 3743 [Coci2015]Kamp——树形dp+换根
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. “从根出发又回到根” 减去 “mx ” . 注意dfsx里真的要改那 ...
- 【BZOJ3743】[Coci2015]Kamp 树形DP
[BZOJ3743][Coci2015]Kamp Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举 ...
- Bzoj 1131[POI2008]STA-Station (树形DP)
Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...
- bzoj 3743 [ Coci 2015 ] Kamp —— 树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 一开始想到了树形DP,处理一下子树中的最小值,向上的最小值,以及子树中的最长路和向上的 ...
- 『kamp 树形dp』
kamp Description jz 市的云台山是个很美丽的景区,小 x 暑期到云台山打工,他的任务是开景区的大巴. 云台山景区有 N 个景点,这 N 个景点由 N-1 条道路连接而成,我们保证这 ...
- BZOJ 4726: [POI2017]Sabota? 树形dp
4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...
- bzoj 2286(虚树+树形dp) 虚树模板
树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 5002 Sol ...
- BZOJ 4472 [Jsoi2015]salesman(树形DP)
4472: [Jsoi2015]salesman Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 417 Solved: 192[Submit][St ...
- BZOJ 4890: [Tjoi2017]城市 树形dp
标签:树形dp,枚举,树的直径 一上来看到这个题就慌了,只想到了 $O(n^3)$ 的做法. 碰到这种题时要一步一步冷静地去分析,观察数据范围. 首先,$n\leqslant 5000$,所以可以先 ...
随机推荐
- swagger & api & swagger ui
swagger & api swagger ui # run server $ swagger project start api-app # call api $ curl http://1 ...
- pdf & background
pdf & background 设置 chrome pdf background error OK
- 【扫描线】Educational Codeforces Round 4 D. The Union of k-Segments
http://codeforces.com/contest/612/problem/D [题解] http://blog.csdn.net/strokess/article/details/52248 ...
- [K/3Cloud] 理解BOS关于Enabled属性的表决器原理
通常的编程中,我们习惯: btnOK.Enabled = true; 这个样子就会将按钮变成有效,反之亦然.但在ERP的表单中,其某个按钮或字段其有效性及其复杂,例如一个表格中某个数量单元格其有效性是 ...
- 可并堆试水--BZOJ1367: [Baltic2004]sequence
n<=1e6个数,把他们修改成递增序列需把每个数增加或减少的总量最小是多少? 方法一:可以证明最后修改的每个数一定是原序列中的数!于是$n^2$DP(逃) 方法二:把$A_i$改成$A_i-i$ ...
- ajax分页查询信息的通用方法
1.页面准备分页的表格与分页div 同时需要在查询条件表单中准备隐藏当前页与页大小的文本框 <div class="container-fluid"> <div ...
- Linux下汇编语言学习笔记5 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- 安装最新版本的zabbix
1. 先安装php5.4 最新版本: yum安装php5.4或5.5 https://blog.csdn.net/MarkBoo/article/details/49424183 2. 然后参照官网或 ...
- COLLECTL LINUX 监控
http://blog.csdn.net/leichelle/article/details/23590289
- PS如何绘制虚线圆
1 绘制一个圆的路径 2 选择铅笔工具,然后点击"画笔笔尖形状",选好笔尖的直径和间距(不同的直径对应不同的间距,没有标准数值,自己推拉滑动条就可以了) 3 在路径选项卡, ...