题目大意

给你一颗有\(n\)个点的树\(T\),边上有边权。

规定,\(d(i,j)\)表示点i到点j路径上的边权之和。

给你\(q\)次询问,每次询问格式为\(i, j\),表示将按输入顺序排序的第\(i\)条边边权修改为\(j\),并要求回答任取三个不同点\(c_1,c_2,c_3\),所带来的费用\(d(c_1,c_2)+d(c_1,c_3) + d(c_2,c_3)\)的期望

原题面

D. New Year Santa Network

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

New Year is coming in Tree World! In this world, as the name implies, there are n cities connected by n - 1 roads, and for any two distinct cities there always exists a path between them. The cities are numbered by integers from 1 to n, and the roads are numbered by integers from 1 to n - 1. Let's define d(u, v) as total length of roads on the path between city u and city v.

As an annual event, people in Tree World repairs exactly one road per year. As a result, the length of one road decreases. It is already known that in the i-th year, the length of the ri-th road is going to become wi, which is shorter than its length before. Assume that the current year is year 1.

Three Santas are planning to give presents annually to all the children in Tree World. In order to do that, they need some preparation, so they are going to choose three distinct cities c1, c2, c3 and make exactly one warehouse in each city. The k-th (1 ≤ k ≤ 3) Santa will take charge of the warehouse in city ck.

It is really boring for the three Santas to keep a warehouse alone. So, they decided to build an only-for-Santa network! The cost needed to build this network equals to d(c1, c2) + d(c2, c3) + d(c3, c1) dollars. Santas are too busy to find the best place, so they decided to choose c1, c2, c3 randomly uniformly over all triples of distinct numbers from 1 to n. Santas would like to know the expected value of the cost needed to build the network.

However, as mentioned, each year, the length of exactly one road decreases. So, the Santas want to calculate the expected after each length change. Help them to calculate the value.

Input

The first line contains an integer n (3 ≤ n ≤ 105) — the number of cities in Tree World.

Next n - 1 lines describe the roads. The i-th line of them (1 ≤ i ≤ n - 1) contains three space-separated integers ai, bi, li (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ li ≤ 103), denoting that the i-th road connects cities ai and bi, and the length of i-th road is li.

The next line contains an integer q (1 ≤ q ≤ 105) — the number of road length changes.

Next q lines describe the length changes. The j-th line of them (1 ≤ j ≤ q) contains two space-separated integers rj, wj (1 ≤ rj ≤ n - 1, 1 ≤ wj ≤ 103). It means that in the j-th repair, the length of the rj-th road becomes wj. It is guaranteed that wj is smaller than the current length of the rj-th road. The same road can be repaired several times.

Output

Output q numbers. For each given change, print a line containing the expected cost needed to build the network in Tree World. The answer will be considered correct if its absolute and relative error doesn't exceed 10 - 6.

Examples

Input

Copy

3

2 3 5

1 3 3

5

1 4

2 2

1 2

2 1

1 1

Output

14.0000000000

12.0000000000

8.0000000000

6.0000000000

4.0000000000

Input

Copy

6

1 5 3

5 3 2

6 1 7

1 4 4

5 2 3

5

1 2

2 1

3 5

4 1

5 2

Output

19.6000000000

18.6000000000

16.6000000000

13.6000000000

12.6000000000

Note

Consider the first sample. There are 6 triples: (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1). Because n = 3, the cost needed to build the network is always d(1, 2) + d(2, 3) + d(3, 1) for all the triples. So, the expected cost equals to d(1, 2) + d(2, 3) + d(3, 1).

题解

考虑任选三个点\(a,b,c,\)会发现答案是\(a->b, a->c, b->c\)所走过的边权之和的两倍

考虑每一条边可能会被多少个三元组选中。相当于在割掉这条边的子树\(T_1\)和\(T_2\)里选三个点的方案数

期望除以\(C(n, 3)\)即可

注意会爆\(long\) \(long\),要\(double\)边乘边除才能过。虽然会降低精度,但\(10^{-6}\)还(居)是(然)能过的。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
inline long long max(long long a, long long b){return a > b ? a : b;}
inline long long min(long long a, long long b){return a < b ? a : b;}
inline long long abs(long long x){return x < 0 ? -x : x;}
inline void swap(long long &x, long long &y){long long tmp = x;x = y;y = tmp;}
inline void read(long long &x)
{
x = 0;char ch = getchar(), c = ch;
while(ch < '0' || ch > '9') c = ch, ch = getchar();
while(ch <= '9' && ch >= '0') x = x * 10 + ch - '0', ch = getchar();
if(c == '-') x = -x;
}
const long long INF = 0x3f3f3f3f;
const long long MAXN = 300000 + 10;
struct Edge
{
long long u, v, w, nxt, rank;
Edge(long long _u, long long _v, long long _w, long long _nxt, long long _rank){rank = _rank;u = _u;v = _v;nxt = _nxt;w = _w;}
Edge(){}
}edge[MAXN << 1];
long long head[MAXN], cnt = 1, pos[MAXN];
inline void insert(long long a, long long b, long long c, long long d)
{
edge[++ cnt] = Edge(a, b, c, head[a], d), head[a] = cnt;
edge[++ cnt] = Edge(b, a, c, head[b], d), head[b] = cnt;
}
long long n, q, size[MAXN];
long long C(long long n, long long m)
{
if(m == 1) return n;
else return n * (n - 1) >> 1;
}
void dfs(long long x, long long pre)
{
size[x] = 1;
for(long long pos = head[x];pos;pos = edge[pos].nxt)
{
long long v = edge[pos].v;
if(v == pre) continue;
dfs(v, x);
::pos[edge[pos].rank] = pos;
size[x] += size[v];
}
}
double sum, mu;
int main()
{
read(n);mu = 1;
mu = n * (n - 1) / 2 * (n - 2) / 3;
for(long long i = 1;i < n;++ i)
{
long long tmp1, tmp2, tmp3;
read(tmp1), read(tmp2), read(tmp3);
insert(tmp1, tmp2, tmp3, i);
}
dfs(1, -1);
for(long long i = 1;i < n;++ i)
{
long long p = pos[i];
sum += 2 * edge[p].w *
(C(size[edge[p].v], 1) * C(n - size[edge[p].v], 2) +
C(size[edge[p].v], 2) * C(n - size[edge[p].v], 1)) / mu;
}
read(q);
for(long long i = 1;i <= q;++ i)
{
long long tmp1, tmp2;
read(tmp1), read(tmp2);
long long p = pos[tmp1];
sum += 2 * (tmp2 - edge[p].w) *
(C(size[edge[p].v], 1) * C(n - size[edge[p].v], 2) +
C(size[edge[p].v], 2) * C(n - size[edge[p].v], 1)) / mu;
edge[p].w = tmp2;
printf("%.10lf\n", (double)sum);
}
return 0;
}

Codeforces 500D. New Year Santa Network的更多相关文章

  1. Codeforces 500D New Year Santa Network(树 + 计数)

    D. New Year Santa Network time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  2. CF 500D New Year Santa Network tree 期望 好题

    New Year is coming in Tree World! In this world, as the name implies, there are n cities connected b ...

  3. Good Bye 2014 D. New Year Santa Network 图论+期望

    D. New Year Santa Network   New Year is coming in Tree World! In this world, as the name implies, th ...

  4. cf500D New Year Santa Network

    D. New Year Santa Network time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  5. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  6. D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)

    Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...

  7. 【codeforces 500D】New Year Santa Network

    [题目链接]:http://codeforces.com/problemset/problem/500/D [题意] 有n个节点构成一棵树; 让你随机地选取3个不同的点a,b,c; 然后计算dis(a ...

  8. Codeforces Educational Codeforces Round 15 C. Cellular Network

    C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  9. codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径

    题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...

随机推荐

  1. java继承,多态

    子类继承父类,用父类去接收子类,其实我觉得用父类,子类来形容继承关系是不恰当的,比如再发生多态的时候,Car c = new W();w是大众,你能说Car 和W是父子关系吗,我觉得用所属关系类描述可 ...

  2. 微信小程序传递URL中含有特殊字符

    小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...

  3. Linux tee命令使用详解分享

    tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的man 信息 read from standard input and write ...

  4. jvm虚拟内存分布 与 GC算法

    jvm虚拟内存分布 程序计数器(PC寄存器)(线程私有): 每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器. PC寄存器的内容总是指向下一条将被执行指令的地址 ...

  5. 一图读懂POLARDB Box数据库一体机的云原生力量!

    2019杭州云栖大会上,阿里云宣布正式推出高性能数据库一体机——POLARDB Box,用户部署在自有数据中心即可享受云数据库的便捷体验,同时还为Oracle等传统数据库用户提供一键迁移功能,最多节省 ...

  6. shell启停服务脚本模板

    一. 启动脚本模板:符合幂等性 如果该服务已经启动,再次调用该脚本,不会报错,也就是说可以反复多次调用,另外启动成功返回 一个参数,提供给自动发布平台校验该服务是否启动 #!/bin/bash ins ...

  7. (转)小白科普, netty 有啥用?

      随着移动互联网的爆发性增长,小明公司的电子商务系统访问量越来越大,由于现有系统是个单体的巨型应用,已经无法满足海量的并发请求,拆分势在必行. 在微服务的大潮之中, 架构师小明把系统拆分成了多个服务 ...

  8. D3.js+Es6+webpack构建人物关系图(力导向图)

    功能列表:1. 增加下载SVG转PNG功能,图片尺寸超出可视区域也能够下载全部显示出来2. 增加图谱放大缩小平移功能3. 增加图谱初始化加载时自动缩放功能4. 增加导出excel功能,配合后台工具类达 ...

  9. <每日一题>题目12:列表解析及zip、dict函数的简单应用

    ''' 分析: 1.列表解析:迭代机制的一种应用 语法: [expression for iter_val in iterable] [expression for iter_val in itera ...

  10. P1030 求先序排列 /// 二叉树的遍历

    题目大意: 给一棵树的中序排列 后序排列,求这棵树的先序排列 https://www.luogu.org/problemnew/show/P1030 二叉树的四种遍历解说 几种遍历的递归实现 后序排列 ...