题目背景

盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦。

题目描述

琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地。这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃。

这些西瓜蔓具有神奇的性质,可以将经过它的冷气的寒冷程度放大或缩小,每条西瓜蔓放大/缩小冷气寒冷程度的能力值为Wi,表示冷气经过它后,寒冷程度值x会变为x*wi。每个西瓜也有一个寒冷程度值,炎热的夏日,所有西瓜的寒冷程度值初始都为0。

琪露诺会做出两种动作:

①.对着西瓜i放出寒冷程度为x的冷气。这股冷气顺着西瓜蔓向“西瓜树”的叶子节点蔓延,冷气的寒冷程度会按照上面的规则变化。遇到一个西瓜连了多条西瓜蔓时,每条叶子节点方向的西瓜蔓均会获得与原先寒冷程度相等的冷气。途径的所有西瓜的寒冷程度值都会加上冷气的寒冷程度值。

⑨.向你询问西瓜i的寒冷程度值是多少。

等等,为什么会有⑨?因为笨蛋琪露诺自己也会忘记放了多少冰呢。

所以,帮她计算的任务就这么交给你啦。

输入输出格式

输入格式:

第一行一个整数n,表示西瓜的数量。

西瓜编号为1~n,1为这棵“西瓜树”的根。

接下来n-1行,每行有两个整数u,v和一个实数w,表示西瓜u和西瓜v之间连接有一条藤蔓,它放大/缩小冷气寒冷程度的能力值为w。

接下来一行一个整数m,表示操作的数量。

接下来m行,每行两个或三个整数。

第一个数只能是1或9。

如果为1,接下来一个整数i和一个实数x,表示对西瓜i放出寒冷程度为x的冷气。

如果为9,接下来一个整数i,表示询问编号为i的西瓜的寒冷程度值。

输出格式:

对于每个操作⑨,输出一行一个实数,表示对应西瓜的寒冷程度值。

输入输出样例

输入样例#1:
复制

4
1 2 1.00000000
2 3 0.00000000
3 4 1.00000101
9
1 1 3.00000000
9 2
9 3
1 2 1.42856031
9 4
9 2
1 3 4.23333333
9 2
9 4
输出样例#1: 复制

3.00000000
0.00000000
0.00000000
4.42856031
4.42856031
4.23333761

说明

子任务可能出现如下的特殊性质:

“西瓜树”退化为一条链

输入数据中的实数均保留8位小数,选手的答案被判作正确当且仅当输出与标准答案误差不超过10^-7。请特别注意浮点数精度问题。

实际数据中,冷气的寒冷程度x的范围为 [-0.1,0.1]

(样例中的冷气寒冷程度的范围为[1,5])

命题人:orangebird,鸣谢oscar。


考虑如果只是从1号节点放冰, 那么它的答案就是$\large sum*pi$.

$pi$是指从根节点到$i$的$ki$的乘积。

我们把这棵树的dfs序搞出来,然后这样就变成了处理序列上的问题,然后发现无法区间处理。

但是想想,我们每次修改子树x的时候,只要整颗子树加上 $\large y / px$,然后询问的时候再乘上$pi$就可以得到答案了。


#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
#define reg register
inline int read() {
int res = ;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) res=(res<<)+(res<<)+(ch^), ch=getchar();
return res;
}
#define double long double
#define N 100005
int n, m;
struct edge {
int nxt, to;
double val;
}ed[N*];
int head[N], cnt;
inline void add(int x, int y, double z)
{
ed[++cnt] = (edge){head[x], y, z};
head[x] = cnt;
}
double p[N];
int root[N], numroot;
int f[N]; int in[N], out[N], tot; void dfs(int x, int fa)
{
in[x] = ++tot;
for (reg int i = head[x] ; i ; i = ed[i].nxt)
{
int to = ed[i].to;
if (to == fa) continue;
if (fabs(ed[i].val) <= 1e-) {
root[++numroot] = to;
f[numroot] = x;
continue;
}
p[to] = p[x] * ed[i].val;
dfs(to, x);
}
out[x] = tot;
} double tr[N];
inline void add(int x, double z)
{
while(x <= n) {
tr[x] += z;
x += x & -x;
}
}
inline double ask(int x)
{
double res = ;
while(x) {
res += tr[x];
x -= x & -x;
}
return res;
} int main()
{
n = read();
for (reg int i = ; i < n ; i ++)
{
int x = read(), y = read();
double z;
scanf("%Lf", &z);
add(x, y, z), add(y, x, z);
}
p[] = 1.0;
dfs(, );
for (reg int i = ; i <= numroot ; i ++)
{
p[root[i]] = 1.0;
dfs(root[i], f[i]);
}
m = read();
while(m--)
{
int opt = read();
if (opt == ) {
int x = read();
double y;scanf("%Lf", &y);
add(in[x], (double)y / (double)p[x]), add(out[x] + , - (double)y / (double)p[x]);
} else {
int x = read();
printf("%.8Lf\n", ask(in[x]) * p[x]);
}
}
return ;
}

[Luogu3787] 冰精冻西瓜的更多相关文章

  1. [luogu P3787][新创无际夏日公开赛] 冰精冻西瓜 [树状数组][dfs序]

    题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有 ...

  2. 冰精冻西瓜[P3787洛谷]

    题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质,可以将经过它的 ...

  3. [Luogu 3787] 冰精冻西瓜

    Description 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质, ...

  4. [洛谷 P3787] 冰精冻西瓜

    题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质,可以将经过它的 ...

  5. luogu P3787 冰精冻西瓜

    嘟嘟嘟 好题,好题…… 看这个修改和询问,就知道要么是求完dfs序后线段树维护,要么是树剖.又因为这道题都是子树的操作,没有链上的,所以线段树就够了. 然而重点不是这个.这道题最麻烦的是线段树push ...

  6. 【Luogu】P3787冰精冻西瓜(线段树)

    题目链接 我脑子怕不是有坑qwqqq 用前缀和思想,dis[i]表示i离根的距离,那么修改操作其实是对x的子树区间加y/dis[x],查询的时候*dis[to]即可. 对付/0错的思路是建森林,然而这 ...

  7. Hello 畅连·西瓜 帮助与更新

    无感认证很好用,软件不再更新, 感谢每一位朋友的陪伴,谢谢! (2016.12.15) 百度云:点击下载 ------------旧版更新日志------------- Hello 畅连·西瓜 官网: ...

  8. u3d shader forge 冰渐冻材质

    <ignore_js_op> 分享个自己研究的冰材质渐冻shader可以调节的参数很多,并且带模型顶点偏移,能更加真实模拟冰的凹凸厚度感.(参数过大容易出现模型破损,慎用)shader f ...

  9. 你好,C++(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序

    4.1.6 操作符之间的优先顺序 在表达一些比较复杂的条件判断时,在同一个表达式中,有时可能会存在多个操作符.比如,我们在判断要不要买某个西瓜时,不仅要判断它的总价(单价8.2元/斤,一共10.3斤) ...

随机推荐

  1. cent OS 7 忘记 root 密码

    1. 在如下图, 选择系统的界面 按 e 2. 移动光标到文件底部, 修改如下两个地方(初始化 shell文件 并设置可读写), Ctrl x 退出并启动 shell 3. 如下界面 输入命令 mou ...

  2. 《JavaScript DOM 编程艺术》 学习笔记

    目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...

  3. Cocos Creator 中 _worldMatrix 到底是什么(上)

    Cocos Creator 中 _worldMatrix 到底是什么(上) 1. (矩阵)Matrix是什么,有什么用 (矩阵)Matrix一个神奇的存在?在开发过程中对里边各项值的含义是不是抓耳挠腮 ...

  4. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果

               OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实 ...

  5. Spring boot缓存初体验

    spring boot缓存初体验 1.项目搭建 使用MySQL作为数据库,spring boot集成mybatis来操作数据库,所以在使用springboot的cache组件时,需要先搭建一个简单的s ...

  6. Hbase入门(二)——安装与配置

    本文讲述如何安装,部署,启停HBase集群,如何通过命令行对Hbase进行基本操作. 并介绍Hbase的配置文件. 在安装前需要将所有先决条件安装完成. 一.先决条件 1.JDK 和Hadoop一样, ...

  7. android studio 开发环境的搭建

    步骤如下: 下载安装配置JDK(注意配置环境变量JAVA_HOME Path CLASSPATH) 从官网下载Android Studio(可以下载带有SDK版本的) 安装Android Studio ...

  8. ubuntu linux 修改ip 超扎心。

    老大说“终于搞定了,快记下来,不然以后又忘了”(露出慈母般的微笑) 参考地址:https://jingyan.baidu.com/article/adc815139ddcc4f723bf7339.ht ...

  9. 配置文件my.cnf---配置信息注释大全

    在进行MySQL与CM+CHD之间的应用配置时,发现此前对于MySQL的配置含义过于模糊,所以将CM+CHD集群所涉及MySQL方面的配置含义进行抽取并加以注释,方便此后的配置和使用. 一.客户端设置 ...

  10. 【爬虫小程序:爬取斗鱼所有房间信息】Xpath(多线程版)

    # 本程序亲测有效,用于理解爬虫相关的基础知识,不足之处希望大家批评指正 from queue import Queue import requests from lxml import etree ...