博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树上边分治-求任意两点路径的总和
阅读量:6111 次
发布时间:2019-06-21

本文共 2125 字,大约阅读时间需要 7 分钟。

传送门

经过组合数学推导可得     题目要求2*(n-1)!*树上路径总和

路径总和可以通过边dfs边计算

每一条边的贡献为 siz*(n-siz)次 siz为子树大小

/**    Copyright(c)    All rights reserved.    Author : @klay    Date : 2018-08-28-20.16.35    Description : 树上任意两点路径总和*/#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define A first#define B second#define mp make_pair#define pb push_back#define pw(x) (1ll << (x))#define sz(x) ((int)(x).size())#define all(x) (x).begin(),(x).end()#define rep(i,l,r) for(int i=(l);i<(r);i++)#define per(i,r,l) for(int i=(r);i>=(l);i--)#define FOR(i,l,r) for(int i=(l);i<=(r);i++)#define eps 1e-9#define PIE acos(-1)#define cl(a,b) memset(a,b,sizeof(a))#define fastio ios::sync_with_stdio(false);cin.tie(0);#define lson l , mid , ls#define rson mid + 1 , r , rs#define ls (rt<1)#define rs (ls|1)#define INF 0x3f3f3f3f#define lowbit(x) (x&(-x))#define sqr(a) a*a#define ll long long#define vi vector
#define pii pair
#define dd(x) cout << #x << " = " << (x) << ", "#define de(x) cout << #x << " = " << (x) << "\n"#define endl "\n"using namespace std;//**********************************const int maxn=1e5+7;const int mod=1e9+7;struct Edge{ int to,dist,next;}edge[maxn];int tot,n,m,head[maxn],fac[maxn+7]={ 1};ll ans;//**********************************void Init(){ tot=0; ans=0; cl(head,-1);}void getfac(){ FOR(i,1,maxn)fac[i]=fac[i-1]*i%mod;}void add_edge(int from,int to,int dist){ edge[tot].to=to; edge[tot].dist=dist; edge[tot].next=head[from]; head[from]=tot++;}int dfs(int u,int fa){ int size=1; for(int i=head[u];~i;i=edge[i].next){ int v=edge[i].to; int siz=dfs(v,u); ll tmp=siz%mod*(n-siz)%mod*2%mod*(fac[n-1])%mod*edge[i].dist%mod; ans=(ans+tmp)%mod; size+=siz; } return size;}//**********************************int main(){ getfac(); while(~scanf("%d",&n)){ Init(); int u,v,w; rep(i,0,n-1)scanf("%d%d%d",&u,&v,&w),add_edge(u,v,w),add_edge(v,u,w); dfs(1,-1); printf("%lld\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/klaycf/p/9550841.html

你可能感兴趣的文章
JSONP实现跨域
查看>>
Python基础班---第一部分(基础)---Python基础知识---计算机组成原理
查看>>
虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
查看>>
POJ3694 Network
查看>>
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
DropDownList 控制日期控件显示格式
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
【设计模式系列】单例模式的7种写法
查看>>
汉字转拼音 (转)
查看>>
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
Cordova 开发环境搭建及创建第一个app
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
dedecms生成文档数据库崩溃 mysql daemon failed to start
查看>>
Linux的50个基本命令
查看>>
Objective-C中创建单例方法的步骤
查看>>
[转]无法安装MVC3,一直卡在vs10-kb2483190
查看>>
Codeforces 520B:Two Buttons(思维,好题)
查看>>