Advertisement
yicongli

HDU6446

Mar 17th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=1e5+7;
  17. const int p=1e9+7;
  18.  
  19. int n,ecnt;
  20. int fir[N];
  21. int w[N<<1];
  22. int to[N<<1];
  23. int nex[N<<1];
  24.  
  25. inline void addedge(int u,int v,int c){
  26.     nex[++ecnt]=fir[u],fir[u]=ecnt,to[ecnt]=v,w[ecnt]=c;
  27.     nex[++ecnt]=fir[v],fir[v]=ecnt,to[ecnt]=u,w[ecnt]=c;
  28. }
  29.  
  30. ll ans;
  31.  
  32. int dfs(int x,int f,int c){
  33.     int siz=1;
  34.     for(int i=fir[x];i;i=nex[i]){
  35.         int v=to[i];
  36.         if(v==f)continue;
  37.         siz+=dfs(v,x,w[i]);
  38.     }
  39.     ans+=(ll)(n-siz)*siz%p*c%p;
  40.     return siz;
  41. }
  42.  
  43. int main(){
  44.     while(~scanf("%d",&n)){
  45.         ans=ecnt=0;
  46.         memset(fir+1,0,sizeof(fir));
  47.         for(int i=1;i<n;++i){
  48.             int u,v,c;
  49.             r(u),r(v);r(c);
  50.             addedge(u,v,c);
  51.         }
  52.         dfs(1,0,0);
  53.         ans=ans*2%p;
  54.         for(int i=2;i<n;++i){
  55.             (ans*=i)%=p;
  56.         }
  57.         printf("%lld\n",ans);
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement