没啥好说的,拆一下贡献就完事了.记dis(x,y)为树上x到y的最短路径,设长度为n的排列中有f(n)个里面x和y相邻(不考虑x和y的顺序),那么f(n)=(n-2)! (n-1) 2,显然这个f(n)和x,y具体是谁没啥关系.那么就把树上任意两点之间的路径长度再求个和乘上f(n)就行了.树上任意两点之间的路径长度之和也可以拆贡献,分别考虑每一条边,看这条边两侧分别有a,b个点那么就有2ab个有序点对满足之间的路径经过这条边.少取模WA了一次.

咸鱼选手又有了能翻身的错觉

  1. #include<cstdio>
  2. const int mod=(int)(1e9+7);
  3. const int maxn=100005;
  4. struct edge{
  5. int to,next,w;
  6. }lst[maxn<<1];int cnt=0;
  7. int first[maxn];
  8. void addedge(int a,int b,int w){
  9. lst[++cnt].next=first[a];
  10. lst[cnt].to=b;lst[cnt].w=w;
  11. first[a]=cnt;
  12. }
  13. int fac[maxn];
  14. int sz[maxn];
  15. int n;
  16. int ans=0;
  17. void dfs(int x,int prt){
  18. sz[x]=1;
  19. for(int pt=first[x];pt;pt=lst[pt].next){
  20. if(lst[pt].to==prt)continue;
  21. dfs(lst[pt].to,x);sz[x]+=sz[lst[pt].to];
  22. ans+=sz[lst[pt].to]*2ll*(n-sz[lst[pt].to])%mod*lst[pt].w%mod;ans%=mod;
  23. }
  24. }
  25. int qpow(int a,int x){
  26. int ans=1;
  27. for(;x;x>>=1,a=a*1ll*a%mod){
  28. if(x&1)ans=ans*1ll*a%mod;
  29. }
  30. return ans;
  31. }
  32. int ifac[maxn];
  33. int C(int n,int m){
  34. return fac[n]*1ll*ifac[m]%mod*ifac[n-m]%mod;
  35. }
  36. int main(){
  37. fac[0]=1;
  38. for(int i=1;i<maxn;++i)fac[i]=i*1ll*fac[i-1]%mod;
  39. ifac[maxn-1]=qpow(fac[maxn-1],mod-2);
  40. for(int i=maxn-1;i>=1;--i)ifac[i-1]=ifac[i]*1ll*i%mod;
  41. while(scanf("%d",&n)!=EOF){
  42. ans=0;cnt=0;for(int i=1;i<=n;++i)first[i]=0;
  43. for(int i=1,u,v,w;i<n;++i){
  44. scanf("%d%d%d",&u,&v,&w);
  45. addedge(u,v,w);addedge(v,u,w);
  46. }
  47. dfs(1,-1);
  48. int g=0;
  49. for(int i=0;i<=n-2;++i){
  50. g+=fac[i]*1ll*fac[n-2-i]%mod*C(n-2,i)%mod;g%=mod;
  51. }
  52. printf("%d\n",g*1ll*ans%mod);
  53. }
  54. return 0;
  55. }

hdu6446 Tree and Permutation的更多相关文章

  1. HDU6446 Tree and Permutation(树上DP)

    传送门:点我 Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  2. hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs

    题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...

  3. HDU6446 Tree and Permutation(树、推公式)

    题意: 给一棵N个点的树,对应于一个长为N的全排列,对于排列的每个相邻数字a和b,他们的贡献是对应树上顶点a和b的路径长,求所有排列的贡献和 思路: 对每一条边,边左边有x个点,右边有y个点,x+y= ...

  4. 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu Tree and Permutation 找规律+求任意两点的最短路

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  6. Tree and Permutation

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

  7. Tree and Permutation (HDU 6446) 题解

    // 昨天打了一场网络赛,表现特别不好,当然题目难度确实影响了发挥,但还是说明自己太菜了,以后还要多多刷题. 2018 CCPC 网络赛 I - Tree and Permutation 简单说明一下 ...

  8. hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解

    题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其 ...

  9. Tree and Permutation dfs hdu 6446

    Problem Description There are N vertices connected by N−1 edges, each edge has its own length.The se ...

随机推荐

  1. python连接数据库问题小结

    在使用python连接数据库的时候遇到了这个问题: 大概意思就是在django的setting.py中配置的用户名和密码报错. 主要就是修改setting.py的配置 其中在里边的name和user项 ...

  2. 虚拟机下安装cad2006和南方cass7.0

    本人电脑是win10系统,装了一个cad2014,cad2014没有与之匹配的cass版本,但cad2014也有用途,于是上网找两个cad版本都安装的教程,发现一个比较好的办法就是安装虚拟机,在虚拟机 ...

  3. 浅谈HTTP中GET和POST请求方式的区别

    浅谈HTTP中GET和POST请求的区别 HTTP认知: HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议.HTTP的底层是TCP/IP.所以GET和POST的底层也是TCP/IP,也 ...

  4. centos7 安装jenkenis

    安装Java 看到当前系统Java版本的命令: java -version 如果显示Java版本号,说明已经正确安装,如果显示没有该命令,需要安装Java: sudo yum install java ...

  5. python迭代器的内置函数

    1.迭代器: 内置函数: (1)iter() -__iter__() (2)next() -__next__() 2.迭代器的举例; 对于Fibs数列,我们对其进行 限量输出: 实现代码如下: cla ...

  6. Android Library开发注意事项

    Android Library开发注意事项 App Module添加依赖Android Library时可以设置library的优先级, 在编译时,app按照library从低到高的优先级依次与每个l ...

  7. golang -- 字符串就地取反

    字符串 定义 在golang中字符串是一种不可变的字节序列,它可以包含任意的数据,包括0值字节,但主要是人类可以阅读的文本.golang中默认字符串被解读为utf-8编码的Unicode码点(文字符号 ...

  8. SQL 查一年内的数据

    --查询今年的 select * from 表 where datediff(yy,时间字段,GETDATE())=0 --查询去年的 select * from 表 where datediff(y ...

  9. sprint2 (第八天)

    今天课多,没做什么功能.这个sprint定的目标比较高,要实现的功能较多,可能完成不了目标值.因为GitHub下载和上传很慢,经常失败,所以这几天都没有更新GitHub,功能明天早点实现然后上传到Gi ...

  10. java程序设计课程实验报告3

    北京电子科技学院(BESTI) 实     验    报     告 课程:java程序设计    班级:1353  姓名:陈都  学号:20135328 成绩:             指导教师:娄 ...