Tree and Permutation

给出一个1,2,3...N的排列,显然全部共有N!种排列,每种排列的数字代表树上的一个结点,设Pi是其中第i种排列的相邻数字表示的结点的距离之和,让我们求sum(Pi)(1<=i<=N!)。

可以设dis(i, j)为树上任意两点间的最短距离,每两点之间的距离都出现了 (N-1)!次,所求答案为 (N-1)! * sum(dis(i, j))。

由于这是一棵树,dis(i, j)的最短路径是唯一的(不存在环),那么对于相邻结点u, v,可以发现边(u, v)走过的次数为左边结点数量*右边结点数量。

#include <bits/stdc++.h>
using namespace std;
#define int long long const int maxn = ;
const int mod = 1e9+;
typedef long long ll;
typedef pair<int, int> P; vector<P> G[maxn];
ll fact[maxn], ans;
int n, child[maxn]; void dfs(int u, int fa)///记录下父节点,避免重复遍历父节点
{
// printf("%d->%d\n", fa, u);
child[u] = ;
int len = G[u].size();
for(int i=;i<len;i++)
{
int v = G[u][i].first;
if(v!=fa)
{
dfs(v, u);
child[u] += child[v];
ans += child[v]*(n-child[v])*G[u][i].second % mod;
ans %= mod;
}
} } signed main()
{
fact[] = ;
for(int i=;i<maxn;i++)
{
fact[i] = fact[i-] * i % mod;
// printf("%d %lld\n", i, fact[i]);
} int u, v, d;
while(scanf("%d", &n)!=EOF)
{
memset(child, , sizeof(child));
for(int i=;i<n;i++)
{
scanf("%d %d %d", &u, &v, &d);
G[u].push_back(P(v, d));
G[v].push_back(P(u, d));
}
ans = ;
dfs(, -);
printf("%lld\n", *ans*fact[n-]%mod); for(int i=;i<=n;i++)
G[i].clear();
}
return ;
}

最新文章

  1. 针对每种Windows Server 操作Excel、Word等Office组件遇到“ComException&quot;、”80070005“等COM错误的解决方案大汇总
  2. Ansible-Tower快速入门-2.准备开始【翻译】
  3. 练习3:修改withdraw 方法 练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。
  4. ytu 1301:Excel地址转换(水题,进制转换)
  5. def文件格式
  6. 美好头标ToolBar
  7. Apache服务器 配置多个网站解决方案
  8. CentOS下安装两个或多个Tomcat7
  9. 【JSP】JSP与oracle数据库交互案例
  10. HTC M7日文版HTL22刷机包 毒蛇2.5.0 ART NFC Sense6.0
  11. 【quickhybrid】H5和原生的职责划分
  12. WebGL 3D 工业隧道监控实战
  13. Linux云计算运维-Redis
  14. jquery 第一章
  15. WebLogic使用总结(一)——WebLogic安装
  16. bzoj2212[Poi2011]Tree Rotations [线段树合并]
  17. 2018牛客网暑假ACM多校训练赛(第五场)F take 树状数组,期望
  18. numpy.loadtxt用法
  19. 撩课-Web大前端每天5道面试题-Day24
  20. Red Hat Enterprise Linux 7.4配置VSFTP服务器

热门文章

  1. locust 的几种写法及部分内容说明
  2. 利用Kruskal算法求最小生成树解决聪明的猴子问题 -- 数据结构
  3. redis 小结二
  4. Git_命令初解
  5. javaweb:关于HttpServletResponse介绍 (转)
  6. 将ShellCode注入进程内存
  7. [转载]Ubuntu下apache的安装与配置
  8. scrapy存储mysql
  9. 使用 dataset 管理数据(官网)
  10. python 单引号、双引号和三引号混用