计蒜客NOIP模拟D1T2
原题:
蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少。另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离之和为多少?
输入格式
第一行一个正整数 n,表示蒜头君的树上的结点个数。
接下来 n− 行,每行两个正整数xi,yi, xi表示i+ 号结点的父亲结点的编号,保证其父结点编号小于自己编号。yi 表示 i+ 号结点的父亲结点与自己间边的距离。
接下来一行一个整数 m,表示树的边权发生改变的次数。
接下来 m 行,每行两个正整数 a,b,表示将 a结点与其父亲结点之间的距离改为b,保证 a≥。
输出格式
先输出一个整数,表示对于原始的树任意两点间最短距离之和。
接下来 m 行,每行输出一个整数,表示每一次改变后,任意两点间最短距离之和。
数据规模
样例输入
4
1 1
1 1
1 1
1
2 2
样例输出
9
12
开始在想LCA啥的[某个人气急败坏的要树剖]但是肯定TLE
虽然研究了一道类似的题解
但最后还是自己写出来了[类似的→hdu2376]
就是给一棵树然后求任意两点的最短距离之和。然后给m次修改重新求和。
方法是每一条边的两段的节点个数相乘[乘法原理]然后再乘上边权。就是计算每条边被经过的次数。
中间的逻辑一定要推理明白。这道题出题人还是很良心的。每次给的都是这条边底下的节点,对于计算方便很多。
m次修改就很好计算了。将这条边的边权修改,把原来的减去再加上现在的即可。
这题因为写反了一个循环所以爆零了。好忧伤。
但是只有经历了爆零才能重获新生吧。
不想多说了。上代码hhhhh。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fa[100000];
long long sum[100000],bian[100000];
int main()
{
int n,m,j,i,k,w,e,s;
long long ans;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
scanf("%d%lld",&fa[i],&bian[i]);
sum[i]=1;
}
for(i=n;i>=2;i--)//这个循环要是逆序因为前面的要依赖后面的
{
sum[fa[i]]+=sum[i];
}
ans=0;
for(i=1;i<=n;i++)
{
ans+=bian[i]*sum[i]*(n-sum[i]);
}
printf("%lld\n",ans);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&j,&k);
ans-=bian[j]*sum[j]*(n-sum[j]);
bian[j]=k;
ans+=bian[j]*sum[j]*(n-sum[j]);
printf("%lld\n",ans);
}
return 0;
}
计蒜客NOIP模拟D1T2的更多相关文章
- 计蒜客NOIP模拟赛4 D1T2小X的密室
小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条 ...
- 计蒜客NOIP模拟赛(3) D1T2 信息传递
一个数据包在一个无向网络中传递.在时刻0,该数据包将依照特定的概率随机抵达网络中的某个节点.网络可以看做一张完全带权无向图,包含N个节点,若t时刻数据包在节点i,则在t+1时刻,数据包被传递到节点j的 ...
- 计蒜客NOIP模拟赛(2) D1T2 表演艺术
凡和邻家男孩玩完了纸牌,兴致很高,于是准备了一场表演艺术对抗赛. 他特意请来了很多表演艺术家,分成绿黑两队,进行名为 PK,实则捞金的表演. 凡为了捞金,开设了一个赌局,在比赛开始之前招揽人们来押注谁 ...
- 计蒜客NOIP模拟赛6 D1T1Diamond-square
Diamond-square 算法是一种能够用于生成噪声的算法,现在我们考虑这个算法的一个变种. 你有一个 2^n\times 2^n2n×2n 的网格,一共有 (2^n+1)^2(2n ...
- 计蒜客NOIP模拟赛4 D2T1 鬼脚图
鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...
- 计蒜客 NOIP模拟赛(3) D1T1火山喷发
火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...
- 计蒜客NOIP模拟赛(2) D1T1邻家男孩
凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...
- 计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi
那年一个雨季,AmyZhi 在校门外弯身买参考书. 这时 SiriusRen 走过来,一言不合甩给她一道“自认为”很难的题: --------------- 给你一个数字 NN(NN 的范围是 11 ...
- 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...
随机推荐
- 用树状数组写的最长上升子序列(友好城市),nlogn。
#include<iostream> #include<algorithm> #define maxn 100000 #define lb(x) x&-x using ...
- [hadoop](1) MapReduce:ChainMapper
前言 本章主要讲述的是对于hadoop生态系统中,MapReduce写的ChainMapper的学习.MapReduce是hadoop集群数据处理的默认框架.而对于数据集中所有的数据必然有一些不友好的 ...
- java 中的运算符
Java的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符. 算数运算符():+ - * / % ++ -- 关系运算符():== != > >= < <= 逻 ...
- xpath的几个常用规则
我们在定位页面元素的时候呢,经常使用到xpath.xpah定位元素,我们可以使用开发者工具,然后右键选取元素的xpath ,但是这种方式得到的xpath是绝对路径,如果页面元素发生变动,经常会出现定位 ...
- Java常用工具——java字符串
一.String常用字符串 package com.imooc.string; public class StringDemo { public static void main(String[] a ...
- Flask 重定向到动态url
url_for() 函数是动态构建一个网址给特定的功能是非常有用的.该函数接受函数的名称作为第一个参数,并接受一个或多个关键字参数,每个参数对应于URL的变量部分. 以下脚本演示了使用 url_for ...
- java切分查询数据库表
在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的.如果表中数据达到上百万以上.即使有单号字段有索引查询也是很慢.这时可以用切分 ...
- 微软手写识别模块sdk及delphi接口例子
http://download.csdn.net/download/coolstar1204/2008061 微软手写识别模块sdk及delphi接口例子
- 16/7/11_PHP-日期和时间
取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和. PHP ...
- django初学---基本目录结构-配置html页面显示步骤
extra_apps 存放第三方应用,包,源码 apps -- 存放内部应用 static --存放CSS文件,JS文件,图片文件等待 media -- 存放系统里允许用户上传的图片或者文件 requ ...