提交时间:2022-07-20 12:11:02

运行 ID: 52919

#include <bits/stdc++.h> using namespace std; long long a[500010];//i= long long ans=0; int u; long long v,b; long long tcmp[500010]; bool bfvis[500010]; long long head[500010]; long long nxt[500010]; long long adj[500010]; long long tot; const long long mod=1000000007;//ans void dfs(int ab,int root,int cnt) { if (ab==root) { memset(tcmp,0,sizeof(tcmp)); tcmp[1]=a[root]; } if (ab>root) { sort(tcmp+1, tcmp+cnt+1);//, for (int i=1; i<=cnt; i++) { ans+=i*tcmp[i]; ans=ans%mod; } } bfvis[ab]=1; //x for (int i=head[ab]; i; i=nxt[i])//x { if (!bfvis[adj[i]]) { tcmp[cnt+1]=a[adj[i]]; bfvis[adj[i]]=1;////2 dfs(adj[i],root,cnt+1); } }// // bfvis[ab]=0;//x } void ins(int s, int b) //`e { adj[++tot]=b; nxt[tot]=head[s]; head[s]=tot; } int main() { long long n; cin>>n; for (int i=1; i<=n; i++) { cin>>a[i]; ans+=a[i]; ans=ans%mod;//s } for (int i=2; i<=n; i++) { cin>>u>>v; ins(u,v); ins(v,u); } for (int i=1; i<=n; i++) { dfs(i,i,1);//; } cout<<ans<<endl;; return 0; } //