CF500D 树+期望
来源:互联网 发布:bim软件一套多少钱 编辑:程序博客网 时间:2024/06/06 16:30
http://codeforces.com/problemset/problem/500/D
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.
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 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.
32 3 51 3 351 42 21 22 11 1
14.000000000012.00000000008.00000000006.00000000004.0000000000
61 5 35 3 26 1 71 4 45 2 351 22 13 54 15 2
19.600000000018.600000000016.600000000013.600000000012.6000000000
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).
/**CF500D 树+期望题目大意:给定一棵树,从所有节点中选择3个点,求出d(c1, c2) + d(c2, c3) + d(c3, c1) 的期望值解题思路:由于给定的图是一棵树,因此图中每一条边都是桥,通过dfs的方法求出每条边两侧的点的个数, 然后sigma(2.0*W[i]*(a*(a-1)/2.0*b + b*(b-1)/2.0*a)),(i:1~n-1).最后除以Cn3就行了。 由于数很大我们在sigma过程中就除。对于每一次询问只需要修改W[i]值就可以了*/#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int maxn=100005;int head[maxn],ip;int cnt[maxn],n;double W[maxn],cn3;void init(){ memset(head,-1,sizeof(head)); ip=0;}struct note{ int v,w,next;} edge[maxn*4];void addedge(int u,int v,int w){ edge[ip].v=v,edge[ip].w=w,edge[ip].next=head[u]; head[u]=ip++;}int dfs(int u,int pre){ int num=1; for(int i=head[u]; i!=-1; i=edge[i].next) { int v=edge[i].v; int id=edge[i].w; if(v==pre)continue; cnt[id]=dfs(v,u); num+=cnt[id]; } return num;}double cal( int id ){ double a = cnt[id] , b = n - cnt[id]; return 2.0*W[id]/cn3*(a*(a-1)/2.0*b + b*(b-1)/2.0*a);}int main(){ while(~scanf("%d",&n)) { cn3=1.0*n*(n-1)*(n-2)/6; init(); for(int i=1; i<n; i++) { int u,v; scanf("%d%d%lf",&u,&v,&W[i]); addedge(u,v,i); addedge(v,u,i); } memset(cnt,0,sizeof(cnt)); dfs(1,0); double ans=0.0; for(int i=1; i<n; i++) ans+=cal(i); int m; scanf("%d",&m); while(m--) { int x; double y; scanf("%d%lf",&x,&y); ans-=cal(x); W[x]=y; ans+=cal(x); printf("%.9lf\n",ans); } } return 0;}
- CF500D 树+期望
- 期望
- 期望
- 期望
- 期望
- 期望
- 期望
- 期望
- 最优二叉树的搜索期望代价
- hdu 5723 最小生成树+期望
- hdu5723 Abandoned country (最小生成树+期望)
- HDU5723 Abandoned country (最小生成树+期望)
- UVALive 6534 Join two kingdoms 树的直径+期望
- [线段树 期望] BZOJ 2752: [HAOI2012]高速公路(road)
- hdu5723 最小生成树+DFS(距离和,期望)
- hdu 5723 (最小生成树 + 树上的期望)
- HDU 5723 Abandoned country 最小生成树,树上期望
- HDU 5723 Abandoned country (最小生成树+期望)
- JDBC-数据库数据类型、批处理-12-30-2014=
- ECDSA (Elliptic Curve Digital Signature Algorithm)
- ireport jasperreports-4.7.0 生成pdf各种问题总结
- Unity3D 学习教程 10 复制物体
- 记录:苹果常用软件dmg列表
- CF500D 树+期望
- 继承
- 我也不知道写什么
- JBPM6 实例教程
- GUI基础知识
- JavaSE之内部类
- 2014下半年软考总结
- OpenCV 立体视觉详细解析(一)---摄像头标定
- 员工管理系统-2-12-31-2014