传送门

首先,一定要把所有点遍历一遍,这时答案应该是\(\frac{\sum 某个点第一次被遍历的时间点}{n-1}\quad\),而且每条边只能走两次,所以每次要遍历完某棵子树才能遍历其它子树。

考虑每次先递归处理子树,记\(f_x=\sum x子树内某个点第一次被遍历的时间点,g_x=w_{x,fa_x}+\sum x 子树内边权\)

显然\(g_x=\sum_{y是x的儿子\quad}g_y\) ; \(f_x\)的话,因为要将儿子以一定顺序遍历,因此某个儿子的贡献应该是\(f_y+sz_y*(w_{(x,y)}+pre)(pre=\sum前面的g_y*2)\)

我们要使得答案最小,先考虑只有两个儿子\(a,b\),如果儿子\(a\)在前面,$$f_x=f_a+sz_aw_{(x,a)}+f_b+sz_b(w_{(x,b)}+g_a2)$$,如果是\(b\)在前,则为$$f_x=f_b+sz_bw_{(x,b)}+f_a+sz_a(w_{(x,a)}+g_b2)$$现在如果\(a\)在前面答案更小,则$$f_a+sz_aw_{(x,a)}+f_b+sz_b(w_{(x,b)}+g_a2)<f_b+sz_bw_{(x,b)}+f_a+sz_a(w_{(x,a)}+g_b2)$$$$sz_aw_{(x,a)}+sz_b(w_{(x,b)}+g_a2)<sz_bw_{(x,b)}+sz_a(w_{(x,a)}+g_b2)$$$$sz_bg_a2<sz_ag_b2$$$$\frac{g_a}{sz_a}<\frac{g_b}{sz_b}$$

然后进行推广,把上式作为排序优先级,排序后做就能得出最终答案了

#include<bits/stdc++.h>
#define il inline
#define re register
#define LL long long
#define db double
#define eps (1e-7) using namespace std;
const int N=500000+10;
il LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
db w[N<<1];
int to[N<<1],nt[N<<1],hd[N],tot=1;
il void add(int x,int y,int z)
{
++tot,to[tot]=y,nt[tot]=hd[x],w[tot]=z,hd[x]=tot;
++tot,to[tot]=x,nt[tot]=hd[y],w[tot]=z,hd[y]=tot;
}
int n;
struct nn
{
db x,y,z;
bool operator < (const nn &bb) const {return z/y!=bb.z/bb.y?z/y<bb.z/bb.y:z<bb.z;}
}st[N];
db f[N],g[N],sz[N];
void dfs(int x,int ffa)
{
sz[x]=1;
for(int i=hd[x];i;i=nt[i])
{
int y=to[i];
if(y==ffa) continue;
dfs(y,x);
sz[x]+=sz[y];
}
int tt=0;
for(int i=hd[x];i;i=nt[i])
{
int y=to[i];
if(y==ffa) continue;
st[++tt]=(nn){f[y]+sz[y]*w[i],sz[y],g[y]+w[i]};
}
sort(st+1,st+tt+1);
for(int i=1;i<=tt;i++)
{
f[x]+=st[i].x+st[i].y*g[x]*2;
g[x]+=st[i].z;
}
} int main()
{
n=rd();
for(int i=1;i<n;i++)
{
int x=rd(),y=rd(),z=rd();
add(x,y,z);
}
dfs(1,0);
printf("%.8lf\n",f[1]/(db)(n-1));
return 0;
}

CF101D Castle的更多相关文章

  1. 题解-CF101D Castle

    题面 CF101D Castle 给一棵 \(n\) 个节点的带权树,求一种遍历方案,从 \(1\) 出发,每条边走两次,走过所有点,第一次经过每个节点的平均时间最小.输出这个平均时间. 数据范围:\ ...

  2. CF101D Castle 树形DP、贪心

    题目传送门 题意:给出一个有$N$个点的树,你最开始在$1$号点,经过第$i$条边需要花费$w_i$的时间.每条边只能被经过$2$次.求出到达除$1$号点外所有点的最早时间的最小平均值.$N \leq ...

  3. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  4. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

  5. AOP之Castle DynamicProxy 动态代理

    这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...

  6. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

    前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...

  7. MVC Castle依赖注入实现代码

    1.MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKe ...

  8. 避免Castle Windsor引起的内存泄露

    原文地址: http://nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning-the-u ...

  9. Castle中AdditionalInterfaces用法介绍

    首先见下图(图一),其中FooController是一个没有实现任何Interface的空类.需要实现的效果是:通过FooController对象调用FooService的Do方法.设置这一不常见的场 ...

随机推荐

  1. jmeter 创建web测试计划

    测试用例: 1 创建5个用户发送请求到2个web页面: 2 发送3次请求 总请求=5*2*3=30 创建这个测试计划需要用到以下元素:thread groups / http request / ht ...

  2. webapi Filter

    webapi的controller和action的控制. 使用场景:webapi接收到加密数据以及签名.验证签名是否有效.我们不能一个个action增加判断. 所以添加Filter是比较明智的方法. ...

  3. Tree 菜单 递归

    转载:http://www.cnblogs.com/igoogleyou/archive/2012/12/17/treeview2.html 一,通过查询数据库的方法 ID 为主键,PID 表明数据之 ...

  4. 【ZOJ2277】The Gate to Freedom

    BUPT2017 wintertraining(16) #4 E ZOJ - 2277 题意 输出\(n^n\)的首位的数字. 题解 用科学计数法表示\(n^n=k\cdot 10^b\),那么\(n ...

  5. android progressdialog 对话框试用实例

    ProgressDialog 跟AlertDialog用法差不多,不同的是:ProgressDialog 显示的是一种"加载中"的效果,android 中 ProgressDial ...

  6. 【Luogu5108】仰望半月的夜空(后缀数组)

    [Luogu5108]仰望半月的夜空(后缀数组) 题面 洛谷 题解 实名举报这题在比赛之前还不是这个样子的,还被我用SAM给水过去了 很明显求出\(SA\)之后就是按照\(SA\)的顺序从前往后考虑每 ...

  7. SIEVE 线性筛

    今天来玩玩筛 英文:Sieve 有什么筛? 这里介绍:素数筛,欧拉筛,约数个数筛,约数和筛 为什么要用筛? 顾名思义,筛就是要漏掉没用的,留下有用的.最终筛出来1~n的数的一些信息. 为什么要用线性筛 ...

  8. 【CF711D】Directed Roads

    题目大意:给定一个 N 个点,N 条边的无向图,现给每条边定向,求有多少种定向方式使得定向后的有向图中无环. 题解:显然,这是一个外向树森林,定向后存在环的情况只能发生在基环树中环的位置,环分成顺时针 ...

  9. 服务器内存占用不断的增加 & 任务管理器(PF使用率)不断的增加:关注句柄数

    最近一二个月以来,我发现服务器的内存占用正按着每天60M的速度增加. 一台windows 2003的服务器(2G内存),刚刚启起时占用内存:600M左右. 运行20天后,内存占用(PF使用):1.8G ...

  10. Flash与JavaScript互动

    最近做的一个项目需要用javascript来实现自动复制文本到剪切板,但测试时发现只有ie6.0支持. 到百度搜索后才发现,原来ie7.0.firefox是不支持这样的操作的,随后又搜索了一下,找到一 ...