Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=1e5+7;
- const int p=1e9+7;
- int n,ecnt;
- int fir[N];
- int w[N<<1];
- int to[N<<1];
- int nex[N<<1];
- inline void addedge(int u,int v,int c){
- nex[++ecnt]=fir[u],fir[u]=ecnt,to[ecnt]=v,w[ecnt]=c;
- nex[++ecnt]=fir[v],fir[v]=ecnt,to[ecnt]=u,w[ecnt]=c;
- }
- ll ans;
- int dfs(int x,int f,int c){
- int siz=1;
- for(int i=fir[x];i;i=nex[i]){
- int v=to[i];
- if(v==f)continue;
- siz+=dfs(v,x,w[i]);
- }
- ans+=(ll)(n-siz)*siz%p*c%p;
- return siz;
- }
- int main(){
- while(~scanf("%d",&n)){
- ans=ecnt=0;
- memset(fir+1,0,sizeof(fir));
- for(int i=1;i<n;++i){
- int u,v,c;
- r(u),r(v);r(c);
- addedge(u,v,c);
- }
- dfs(1,0,0);
- ans=ans*2%p;
- for(int i=2;i<n;++i){
- (ans*=i)%=p;
- }
- printf("%lld\n",ans);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement