提交时间:2022-07-20 12:00:18
运行 ID: 52810
#include <bits/stdc++.h> using namespace std; const int N=5e5+5; int n; int a[N]; int p[N],k[N],m; int u,v; vector<int >e[N]; int vis[N]; long long ans,md=1e9+7; void temp() { for(register int i=1; i<=m; i++) k[i]=p[i]; sort(k+1,k+m+1); for(register int i=1; i<=m; i++) ans=(ans+k[i]*i)%md; } void dfs(int x,int f) { p[++m]=a[x]; if(!vis[x]) temp(); int len=e[x].size(); for(register int i=0; i<len; i++) { int v=e[x][i]; if(v!=f) { dfs(v,x); } } m=m-1; } int main() { scanf("%d",&n); for(register int i=1; i<=n; i++) scanf("%d",&a[i]); for(register int i=1; i<n; i++) { scanf("%d%d",&u,&v); e[u].push_back(v); e[v].push_back(u); } for(register int i=1; i<=n; i++) { dfs(i,0); vis[i]=1; } printf("%lld\n",ans); return 0; }