提交时间:2022-07-20 12:09:07

运行 ID: 52910

#include <bits/stdc++.h> #define mod 1000000007 using namespace std; inline int read() { int x=0; bool f=1; char ch=getchar(); while(ch<48||ch>57) { if(ch=='-') f=0; ch=getchar(); } while(ch>=48&&ch<=57) { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); } return f?x:-x; } int n,u,v,cnt,l[2005],a[2005],f[2005],d[2005]; long long ans; inline long long lj(int u,int v) { if(u==v) return a[u]; long long res=0; l[1]=a[u],l[2]=a[v],cnt=2; while(d[u]>d[v]) u=f[u],l[++cnt]=a[u]; while(d[u]<d[v]) v=f[v],l[++cnt]=a[v]; while(u^v) if(f[u]^f[v]) u=f[u],v=f[v],l[++cnt]=a[u],l[++cnt]=a[v]; l[++cnt]=a[f[u]]; sort(l+1,l+cnt+1); for(int i=1; i<=cnt; i++) res+=(long long)i*l[i],res%=mod; } int main() { n=read(); for(int i=1; i<=n; i++) a[i]=read(); for(int i=1; i<n; i++) u=read(),v=read(),f[v]=u,d[v]=d[u]+1; for(int i=1; i<=n; i++) for(int j=i; j<=n; j++) (ans+=lj(i,j))%=mod; printf("%lld\n",ans); return 0; }