原题:

蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少。另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离之和为多少?

输入格式

第一行一个正整数 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的更多相关文章

  1. 计蒜客NOIP模拟赛4 D1T2小X的密室

    小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向地创造一条 ...

  2. 计蒜客NOIP模拟赛(3) D1T2 信息传递

    一个数据包在一个无向网络中传递.在时刻0,该数据包将依照特定的概率随机抵达网络中的某个节点.网络可以看做一张完全带权无向图,包含N个节点,若t时刻数据包在节点i,则在t+1时刻,数据包被传递到节点j的 ...

  3. 计蒜客NOIP模拟赛(2) D1T2 表演艺术

    凡和邻家男孩玩完了纸牌,兴致很高,于是准备了一场表演艺术对抗赛. 他特意请来了很多表演艺术家,分成绿黑两队,进行名为 PK,实则捞金的表演. 凡为了捞金,开设了一个赌局,在比赛开始之前招揽人们来押注谁 ...

  4. 计蒜客NOIP模拟赛6 D1T1Diamond-square

    Diamond-square 算法是一种能够用于生成噪声的算法,现在我们考虑这个算法的一个变种. 你有一个 2^n\times 2^n2​n​​×2​n​​ 的网格,一共有 (2^n+1)^2(2​n ...

  5. 计蒜客NOIP模拟赛4 D2T1 鬼脚图

    鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...

  6. 计蒜客 NOIP模拟赛(3) D1T1火山喷发

    火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An​​点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...

  7. 计蒜客NOIP模拟赛(2) D1T1邻家男孩

    凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...

  8. 计蒜客NOIP模拟赛5 D1T1 机智的 AmyZhi

    那年一个雨季,AmyZhi 在校门外弯身买参考书. 这时 SiriusRen 走过来,一言不合甩给她一道“自认为”很难的题: --------------- 给你一个数字 NN(NN 的范围是 11  ...

  9. 计蒜客NOIP模拟赛4 D2T2 跑步爱天天

    YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...

随机推荐

  1. 用树状数组写的最长上升子序列(友好城市),nlogn。

    #include<iostream> #include<algorithm> #define maxn 100000 #define lb(x) x&-x using ...

  2. [hadoop](1) MapReduce:ChainMapper

    前言 本章主要讲述的是对于hadoop生态系统中,MapReduce写的ChainMapper的学习.MapReduce是hadoop集群数据处理的默认框架.而对于数据集中所有的数据必然有一些不友好的 ...

  3. java 中的运算符

    Java的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符. 算数运算符():+ - * / % ++ -- 关系运算符():== != > >= < <= 逻 ...

  4. xpath的几个常用规则

    我们在定位页面元素的时候呢,经常使用到xpath.xpah定位元素,我们可以使用开发者工具,然后右键选取元素的xpath ,但是这种方式得到的xpath是绝对路径,如果页面元素发生变动,经常会出现定位 ...

  5. Java常用工具——java字符串

    一.String常用字符串 package com.imooc.string; public class StringDemo { public static void main(String[] a ...

  6. Flask 重定向到动态url

    url_for() 函数是动态构建一个网址给特定的功能是非常有用的.该函数接受函数的名称作为第一个参数,并接受一个或多个关键字参数,每个参数对应于URL的变量部分. 以下脚本演示了使用 url_for ...

  7. java切分查询数据库表

    在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的.如果表中数据达到上百万以上.即使有单号字段有索引查询也是很慢.这时可以用切分 ...

  8. 微软手写识别模块sdk及delphi接口例子

    http://download.csdn.net/download/coolstar1204/2008061 微软手写识别模块sdk及delphi接口例子

  9. 16/7/11_PHP-日期和时间

    取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和. PHP ...

  10. django初学---基本目录结构-配置html页面显示步骤

    extra_apps 存放第三方应用,包,源码 apps -- 存放内部应用 static --存放CSS文件,JS文件,图片文件等待 media -- 存放系统里允许用户上传的图片或者文件 requ ...