蔬菜(vegetable)

题目描述

题目背景:您使用脚本刷出了上题游戏 998244353 关的最高分 (最优解),心满意足的准备点继续学习,忽然一条弹窗弹了出来:你想明白活着的意义吗?你想真正的...... 活着吗?YES or NO 作为一名新时代新青年,您当然不信这种扯淡的东西,毫不犹豫点击了 YES,于是当您醒来的时候,您已经在一片未知森林里了...

您正站在森林中最显眼的一棵树前,一条叫 Skqliao 的人正在树上打盹,他告诉您这棵树是一棵无根树,在第 i 个点上有 x 颗蔬菜,如果您想要回去的话就需要收集尽量多的蔬菜。当然乐于助人的 Skqliao 也会帮助您。具体来讲,首先你和 Skqliao 各选择一个不同的起点,接着轮流选定一个与自己相邻的且两人都未经过的点并到达该点。当某人无法移动时,另一人可以继续移动,直到两人都无法移动为止。当你或 Skqliao 经过某点时就可以收集该点所有蔬菜,请你制定合理策略 (包括 Skqliao 选择的初始位置和操作方式) 尝试获得最多的蔬菜。

输入

第一行一个整数nn,表示树的点数。

第二行有nn个整数,表示每个点上的蔬菜颗数xixi。

接下来n−1n−1行,每行两个整数u,vu,v,表示uu和vv之间有一条边。

输出

能获得的最多的蔬菜数量。

样例输入

<span style="color:#333333"><span style="color:#333333">6
10 8 6 4 2 1
1 2
1 3
2 4
2 5
2 6</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">30</span></span>

提示

对于30% 的数据,n≤15n≤15

对于50% 的数据,n≤100n≤100

对于70% 的数据,n≤5000n≤5000

另有10% 的数据树的形态为一条链

对于100% 的数据,n≤200000,0≤xi≤998244353n≤200000,0≤xi≤998244353

来源

noip2018模拟-北京十一


solution

暴力卡过。

寻找正解请移步神犇博客(?)

可以先树形dp出每一个子树内的最长链

我们暴力枚举一个点,强制令一个点就在这棵树内

那么要修改的dp值为它到根

暴力改 效率O(n*平均深度)

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 200005
#define ll long long
using namespace std;
int n,head[maxn],tot,t1,t2,ft[maxn],flag[maxn],ban,pd;
ll s[maxn],f[maxn],l[maxn],F[maxn],L[maxn],ans;
struct node{int v,nex;
}e[maxn*2];
void lj(int t1,int t2){e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k,int fa){ll m1=0,m2=0,ma=0;ft[k]=fa;for(int i=head[k];i;i=e[i].nex){if(e[i].v==fa)continue;dfs(e[i].v,k);if(l[e[i].v]>m1)m2=m1,m1=l[e[i].v];else if(l[e[i].v]>m2)m2=l[e[i].v];ma=max(ma,f[e[i].v]);}l[k]=m1+s[k];f[k]=max(ma,m1+m2+s[k]);
}
void dp(int k){ll m1=0,m2=0,ma=0;for(int i=head[k];i;i=e[i].nex){if(e[i].v==ft[k])continue;if(flag[e[i].v])dp(e[i].v);if(e[i].v==ban)continue;if(!flag[e[i].v]){if(l[e[i].v]>m1)m2=m1,m1=l[e[i].v];else if(l[e[i].v]>m2)m2=l[e[i].v];ma=max(ma,f[e[i].v]);}else {if(L[e[i].v]>m1)m2=m1,m1=L[e[i].v];else if(L[e[i].v]>m2)m2=L[e[i].v];ma=max(ma,F[e[i].v]);}}L[k]=m1+s[k],F[k]=max(ma,m1+m2+s[k]);
}
int main()
{freopen("vegetable.in","r",stdin);freopen("vegetable.out","w",stdout);cin>>n;for(int i=1;i<=n;i++)scanf("%lld",&s[i]);for(int i=1;i<n;i++){scanf("%d%d",&t1,&t2);lj(t1,t2);lj(t2,t1);if(t1!=t2+1&&t2!=t1+1)pd=1;}if(!pd){for(int i=1;i<=n;i++)ans+=s[i];cout<<ans<<endl;return 0;}dfs(1,0);for(int b=2;b<=n;b++){for(int i=ft[b];i;i=ft[i])flag[i]=1;ban=b;dp(1);ans=max(ans,f[b]+F[1]);for(int i=ft[b];i;i=ft[i])flag[i]=F[i]=L[i]=0;}cout<<ans<<endl;return 0;
}

蔬菜(vegetable)相关推荐

  1. 英语单词记忆以及句式记忆

    一.前言 主讲词汇以及词汇的使用. 词汇方法以3000单词打底.外加500专用词汇.分词频进行排列,以及词以类记进行归纳.归纳方面有介词.数字.颜色.外表.服装.食物.建筑与社会关系.艺术与体育.娱乐 ...

  2. 2012-07-31

    1. [写给自己的忠告]1.慎重选择朋友,不交酒肉朋友.2.不为小事烦恼.3.翻开了一本好书就要一直翻下去.4.不利用别人也不被别人利用.5.不参与可有可无的饭局.6.用善良心态与人共事和交往.7.和 ...

  3. 食物和计算机中一样的英语,表示食物或饮料的英语单词有哪些?

    关于食物的单词 鲈鱼Bass 黄花鱼Corvina 奶鱼Milkfish 鲤鱼Mullet 箭鱼Halibut 鱆鱼Octopus 乌贼Squid 墨鱼cuttlefish 虾Prawn 大虾clam ...

  4. AB级 考试高频词 1000个

    AB级 考试高频词 1000个 1 能力 ability 46 申请 application 91 街区 block 2 在船上 aboard 47 欣赏;感激 appreciate 92 女衬衫 b ...

  5. c++怎么打印出句子中的各个单词_小学英语单词汇总篇 身体 食品、饮料 蔬菜...

    身体英语名称 hair头发 head头 eye眼睛 face脸 neck脖子 arm手臂 leg腿 hand手 foot脚 toe脚趾 finger手指 ear耳朵 nose鼻子 mouth嘴巴 to ...

  6. 大数据实验一 关联规则实验题目:蔬菜价格相关性分析

    学习来源 实验目的:在掌握关联规则算法的原理的基础上,能够应用关联规则算法解决实际问题. 实验内容:根据实验数据,采用Apriori等关联规则发现算法,给出相关关联规则. 实验要求:给出数据预处理过程 ...

  7. celery英语_蔬菜介绍:芹菜 Celery

    蔬菜介绍:芹菜 Celery As much a household staple as onions or potatoes, celery is valued for its crisp text ...

  8. 【机器学习】采用关联规则算法分析蔬菜涨跌规律实验(Apriori算法)

    实验目的:在掌握关联规则算法的原理的基础上,能够应用关联规则算法解决实际问题. 实验内容:根据实验数据,采用Apriori等关联规则发现算法,给出相关关联规则. 实验要求:给出数据预处理过程.关联规则 ...

  9. 基于Java SSM的蔬菜水果农产品网上购物商城的设计与实现

    目 录 摘 要 I Abstract II 目 录 IV 第一章 引言 1 1.1 系统开发背景 1 1.2 系统开发意义 1 1.3论文的主要结构 2 第二章 系统设计工具介绍 3 2.1 平台选择 ...

最新文章

  1. 王维嘉:神经网络的本质是在数据里面提取相关性
  2. win8/Metro开发系列二 Xaml数据绑定
  3. 进程、线程相关知识点整理
  4. HDC.Cloud | 基于IoT Studio自助生成10万行代码的奥秘
  5. html 显图片宽度100,HTML – 如何显示内联几个 100%宽度?
  6. Python 脚本相关知识
  7. 用Python3开发简单应用——兽人之袭
  8. Lucene的几种分词系统
  9. 《机器人学导论》克雷格 第3章
  10. Android 系统源码中添加 androidx 依赖
  11. 一个通用的pytorch使用预训练模型训练本地数据代码--resnet101为例
  12. java软件安装教程_r软件安装教程
  13. 游戏英文词汇命名——备用
  14. spring-boot2 + vue2+element-ui + avue + uni-app (兮家开源商城)
  15. js 绘画js 绘画路径_绘画是一种技能,而不是才能
  16. 真实数据揭秘游戏主播能否月入100万
  17. 期刊论文发表的格式要求是什么
  18. 在Ignite中使用线性回归算法
  19. Bounding box regression RCNN我的理解
  20. CS5518设计MIPI转LVDS转换方案/MIPI转LVDS方案芯片

热门文章

  1. HTML(二)列表、表格、表单元素
  2. 最详细的Android图片压缩解释
  3. 一、 网络安全基础入门-概念名词
  4. 余弦相似度:通过计算两个向量的夹角余弦值来评估他们的相似度
  5. 单片机双字节数乘法运算实验_单片机入门——单片机的基本构成及工作原理(1)...
  6. readlink 获取进程的绝对路径
  7. 清华姚班学生ICML一人署名论文:协作学习的鲁棒性方法
  8. 反射调用目标异常可能原因之一解决java.lang.reflect.InvocationTargetException
  9. 【机器学习】ICA算法简介
  10. List和Map集合遍历的3种方式