hdu6446 Tree and Permutation
没啥好说的,拆一下贡献就完事了.记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了一次.
咸鱼选手又有了能翻身的错觉
#include<cstdio>
const int mod=(int)(1e9+7);
const int maxn=100005;
struct edge{
int to,next,w;
}lst[maxn<<1];int cnt=0;
int first[maxn];
void addedge(int a,int b,int w){
lst[++cnt].next=first[a];
lst[cnt].to=b;lst[cnt].w=w;
first[a]=cnt;
}
int fac[maxn];
int sz[maxn];
int n;
int ans=0;
void dfs(int x,int prt){
sz[x]=1;
for(int pt=first[x];pt;pt=lst[pt].next){
if(lst[pt].to==prt)continue;
dfs(lst[pt].to,x);sz[x]+=sz[lst[pt].to];
ans+=sz[lst[pt].to]*2ll*(n-sz[lst[pt].to])%mod*lst[pt].w%mod;ans%=mod;
}
}
int qpow(int a,int x){
int ans=1;
for(;x;x>>=1,a=a*1ll*a%mod){
if(x&1)ans=ans*1ll*a%mod;
}
return ans;
}
int ifac[maxn];
int C(int n,int m){
return fac[n]*1ll*ifac[m]%mod*ifac[n-m]%mod;
}
int main(){
fac[0]=1;
for(int i=1;i<maxn;++i)fac[i]=i*1ll*fac[i-1]%mod;
ifac[maxn-1]=qpow(fac[maxn-1],mod-2);
for(int i=maxn-1;i>=1;--i)ifac[i-1]=ifac[i]*1ll*i%mod;
while(scanf("%d",&n)!=EOF){
ans=0;cnt=0;for(int i=1;i<=n;++i)first[i]=0;
for(int i=1,u,v,w;i<n;++i){
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);addedge(v,u,w);
}
dfs(1,-1);
int g=0;
for(int i=0;i<=n-2;++i){
g+=fac[i]*1ll*fac[n-2-i]%mod*C(n-2,i)%mod;g%=mod;
}
printf("%d\n",g*1ll*ans%mod);
}
return 0;
}
hdu6446 Tree and Permutation的更多相关文章
- HDU6446 Tree and Permutation(树上DP)
传送门:点我 Tree and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs
题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...
- HDU6446 Tree and Permutation(树、推公式)
题意: 给一棵N个点的树,对应于一个长为N的全排列,对于排列的每个相邻数字a和b,他们的贡献是对应树上顶点a和b的路径长,求所有排列的贡献和 思路: 对每一条边,边左边有x个点,右边有y个点,x+y= ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】
Tree and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 hdu Tree and Permutation 找规律+求任意两点的最短路
Tree and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- Tree and Permutation
Tree and Permutation 给出一个1,2,3...N的排列,显然全部共有N!种排列,每种排列的数字代表树上的一个结点,设Pi是其中第i种排列的相邻数字表示的结点的距离之和,让我们求su ...
- Tree and Permutation (HDU 6446) 题解
// 昨天打了一场网络赛,表现特别不好,当然题目难度确实影响了发挥,但还是说明自己太菜了,以后还要多多刷题. 2018 CCPC 网络赛 I - Tree and Permutation 简单说明一下 ...
- hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解
题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其 ...
- 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 ...
随机推荐
- asp.net core发布到docker报Microsoft.ApplicationInsights.AspNetCore miss的错误
dotnet core 2.1的asp.net core在docker下部署的时候发生下面的错误. Error: An assembly specified in the application de ...
- 《SLAM十四讲》个人学习知识点梳理
0.引言 从六月末到八月初大概一个月时间一直在啃SLAM十四讲[1]这本书,这本书把SLAM中涉及的基本知识点都涵盖了,所以在这里做一个复习,对这本书自己学到的东西做一个梳理. 书本地址:http:/ ...
- Fiddler 抓包https配置 提示:creation of the root certificate was not successful 证书安装不成功
window7 提示:creation of the root certificate was not successful 证书安装不成功 1.cmd 命令行 找到fiddler的安装目录 如 ...
- 解决了一个困扰我近一年的vim显示中文乱码的问题
今天解决了vi命令打开日志文件中文总是显示乱码的问题.由于项目组中的日志包含一些特殊字符,所以使用vim打开日志文件时总是不能正确识别出文件字符编码.此时用:set fileencoding命令可以看 ...
- 分析(function(window, undefined) {})(window)
有的时候,我们会在JS框架中看到这行 (function(window, undefined) {})(window) ,它是做什么用的,我们来分析下它 首先这就是一个匿名函数,立即执行它 (func ...
- Python科学测量与计算库Pymeasure: 控制你的仪器进行自动测试和科学计算
Python这种脚本语言因其语法简单,工具包丰富成熟,使用起来非常方便.在很多领域被广泛使用,今天介绍的是python在仪器控制应用领域,python在仪器控制领域相关的书籍可以参考<真实世界的 ...
- sqli-labs学习笔记 DAY7
DAY7 sqli-labs阶段总结 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and ...
- NIO中的Buffer
public abstract class Buffer { // Invariants: mark <= position <= limit <= capacity private ...
- 完整Highchart JS示例
线性: $.ajax({ type:'post', url:appPages.urlListTjrll, cache:false, data:{year:year,month:month},// // ...
- 第十一次PSP