题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6446

题目给出的数据为一棵树,dfs扫描每条边,假设去掉某条边,则左边 x 个点,右边 n-x 个点,则经过该条边共有 x*(n-x) 种组合,又因为 1~n 全排列有 n! 种,故 a~b,包含 b~a 这条边的贡献为 (n-x)*x*2*(n-1)!*w;

 #include<iostream>
#include<cstdio>
#include<vector>
using namespace std; #define LL long long
const int MOD = 1e9+;
const int N = 1e5+;
struct EDGE {
LL to, length;
};
vector<EDGE> edge[N];
LL n, factorial[N], lchild[N], w[N]; int dfs(int k, int pre) {
int size = edge[k].size(), ans=;
for(int i=; i<size; i++) {
if(edge[k][i].to == pre)
w[k] = edge[k][i].length;
else
ans += dfs(edge[k][i].to, k);
}
return lchild[k] = ans;
} int main()
{
factorial[] = ;
for(int i=; i<N; i++)
factorial[i] = factorial[i-]*i%MOD; while(~scanf("%d",&n))
{
LL ans=;
for(int i=; i<=n; i++) {
edge[i].clear();
}
for(int x,y,v,i=; i<n; i++) {
scanf("%d%d%d", &x, &y, &v);
edge[x].push_back({y,v});
edge[y].push_back({x,v});
} dfs(, -);
for(int i=; i<=n; i++) {
LL tmp=;
tmp = lchild[i]*(n-lchild[i])%MOD;
tmp = *factorial[n-]%MOD*w[i]%MOD*tmp%MOD;
ans = (ans+tmp)%MOD;
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. 详解Maple如何公式推导和生成代码
  2. C语言基础(8)-const,volatile,register关键字
  3. 【BZOJ-1923】外星千足虫 高斯消元 + xor方程组
  4. Hibernate一级缓存与二级缓存的区别
  5. FTP主/被动模式的原理
  6. [EXCEL] 在单元格中自动输入时间和日期
  7. 让 asp.net mvc 支持 带有+ _ 等特殊字符的路由
  8. POJ 3384 Feng Shui
  9. [转]CSS vertical-align属性详解 作者:黄映焜
  10. PHP - 设置地址栏小图标
  11. replace深入
  12. Python基础练习题100例(Python 3.x)
  13. ADC获取滑块的值(8通道)
  14. 适用于typecho0.9的评论表情插件
  15. python文章装饰器理解12步
  16. CentOS 安装git
  17. GRE封装解封装过程
  18. switch(值){ 开始case 值: 闭合break; }
  19. 通过 JDK 自带的 javap 命令查看 SynchronizedDemo 类的相关字节码信息
  20. VS从数据库表生成Model代码

热门文章

  1. Android笔记---常用控件以及用法
  2. bzoj 1076: [SCOI2008]奖励关【状压dp+概率dp】
  3. 限制属性绑定(__slots__)
  4. Chips CodeForces - 333B
  5. Java项目的命名规则
  6. 搭建一个高可用的redis环境
  7. css 尺寸、边框、内边距、背景以及css Sprite
  8. canvas基础绘制-绚丽时钟
  9. VBScript(一)
  10. python中的格式化字符