魔法使的烟花(NOIP模拟赛Round 7)
【问题描述】
魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水。为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探。
魔法森林分为n个区域,由n-1条长度相等的道路将它们连接为了无向连通图。每个区域都有一个等级,这n个区域的等级满足如下性质:
①1号区域的等级为1;
②由一条道路连接的两个区域(即相邻两个区域)等级相差为1;
③设两个区域x,y被一条道路连接,若x到1号区域的最短距离小于y到1号区域的最短距离,则有x到1号区域的最短路径上的所有区域的等级必定小于y的等级。
由于魔法森林各个区域的气候、地形、水文的不同,每个区域都有一个精华值,其中第i号区域的精华值为wi。整片魔法森林还有一个共鸣度m。每个区域吸收的精华值为一个包含该区域的连通子图的精华值之和,由于共鸣度限制,能被一个区域吸收精华值的所有区域的等级必须比该区域的等级高x,x为不超过m的自然数。举个例子:
魔法使希望得到每个区域所吸收的精华值,这将有助于她规划蘑菇的采摘,于是她把这个任务交给了你,因为她还要去住在这附近的另一位魔法使家中喝杯茶。
【数据范围】
对于20%的数据,n,m<=1000;
对于70%的数据,n,m<=10^5;
对于另外10%的数据,m=n;
对于100%的数据,0<=n,m<=10^6,0<wi<=1000。
————————————————我是分割线————————————————
我们理解完这道题目后,显然就可以明白一个点对于答案的贡献就是在从该点开始向上爬m步所经过的节点上加上该点的精华值
所以就是在一个区间上增加自己的精华值
当然就可以用树上差分啦!
思路清晰,没什么可说的
下面贴代码
#include<cstdio>
using namespace std;
int val[];
int st[];
int fa[];
int num,n,m,tp;
int head[];
struct edge{
int to,next;
}g[];
void ins(int u,int v){g[++num].next=head[u];head[u]=num;g[num].to=v;}
void insw(int u,int v){ins(u,v);ins(v,u);}
void dfs(int u,int fat)
{
register int y=tp-m;
if(y<)y=;
fa[st[y]]-=val[u];fa[u]+=val[u];st[++tp]=u;
for(int i=head[u];i;i=g[i].next)
{
if(g[i].to==fat)continue;
dfs(g[i].to,u);
fa[u]+=fa[g[i].to];
}
tp--;
}
int main(){
freopen("mushroom.in","r",stdin);
freopen("mushroom.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&val[i]);
int x,y;
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
insw(x,y);
}
dfs(,);
for(int i=;i<=n;i++)printf("%d\n",fa[i]);
fclose(stdin);
fclose(stdout);
}
魔法使的烟花(NOIP模拟赛Round 7)的更多相关文章
- 水(NOIP模拟赛Round #10)
题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...
- 小红帽的画笔(NOIP模拟赛Round 7)
又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...
- YYH的营救计划(NOIP模拟赛Round 6)
题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...
- 题(NOIP模拟赛Round #10)
题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...
- 大(NOIP模拟赛Round #10)
题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...
- bananahill(NOIP模拟赛Round 8)
题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...
- 战斗机的祈雨仪式(NOIP模拟赛Round 7)
[问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...
- 灰姑娘的水晶鞋(NOIP模拟赛Round 7)
[问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...
- YYH的球盒游戏(NOIP模拟赛Round 6)
题目描述 YYH有一些总共有种颜色的球,他有颜色的球个.他同样有个盒子,第个盒子能放个球. 他的目标是把这个球按规则放进个盒子里: 对于一个盒子,对于每种颜色的球至多只能放个. 把颜色为的球放进盒子, ...
随机推荐
- 快速排序算法Java实现
1) 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行 示例: package ...
- Git-Git协同与工作协同
Git支持的协议 首先来看看数据交换需要使用的协议. Git提供了丰富的协议支持,包括:SSH.GIT.HTTP.HTTPS.FTP.FTPS.RSYNC及前面已经看到的本地协议等.各种不同协议的UR ...
- 15.8,redis-cluster配置
为什么要用redis-cluster 1.并发问题 redis官方生成可以达到 10万/每秒,每秒执行10万条命令假如业务需要每秒100万的命令执行呢? 2.数据量太大 一台服务器内存正常是16~ ...
- HTTPClient和HttpURLConnection实例对比
HttpURLConnection是java的标准类,什么都没封装. HTTPClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等. 简单来说,HTTPClient就是一个增强 ...
- day04_08-while查询所有行
<?php $link = @mysql_connect('localhost','root',''); mysql_query('use test',$link); mysql_query(' ...
- Python——数据类型之str
本篇主要内容: 1.str元素的访问 2.str内置43个方法使用示例 str就是储存各种东西的字符串. 他的方法也是最多的...有各种各样的神奇魔法. 1.str的访问,str可以想列表那样访问每一 ...
- Mysql 查询—按位运算
前言:虽说这是件小事儿,但本宝宝思前想后,还是为它留下一笔,嘿嘿.反正写博客不浪费纸和笔!好久没有开启我的逗比模式了,我亲爱的乖徒弟DBA,DBB,DBAA等,好久不见你们,遥祝幸福快乐+DB. 整个 ...
- WordPress多本小说主题–WNovel主题发布,十分钟搭建小说站! 现已更新至1.2版本
本文属于<WNovel主题操作手册>文章系列,该系列共包括以下 8 部分: WNovel主题使用手册之–主题安装及更新教程 WNovel主题使用手册之–小说管理 WNovel主题使用手册之 ...
- POJ 2142 The balance | EXGCD
题目: 求ax+by=c的一组解,使得abs(x)+abs(y)尽量小,满足前面前提下abs(ax)+abs(by)尽量小 题解: exgcd之后,分别求出让x尽量小和y尽量小的解,取min即可 #i ...
- The UVALIVE 7716 二维区间第k小
The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询 每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素 n <= 2 ...