Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52870 | AK2022071318 | 树上排序 | C++ | 运行超时 | 0 | 4000 MS | 10508 KB | 914 | 2022-07-20 12:05:17 |
#include <bits/stdc++.h> using namespace std; int n,ver[500005],ne[500005],head[500005],tmp[500005],u,v,tot,ans,a[500005]; const int mod=1000000007; bool visit[500005]; void add(int u,int v) { ver[++tot]=v; ne[tot]=head[u]; head[u]=tot; } void dfs(int x,int root,int cnt) { if(x==root) { memset(tmp,0,sizeof(tmp)); tmp[1]=a[root]; } visit[x]++; if(x>root) { sort(tmp+1,tmp+cnt+1); for(int i=1; i<=cnt; i++) ans=(ans+i*tmp[i])%mod; } for(int i=head[x]; i; i=ne[i]) { v=ver[i]; if(!visit[v]) { tmp[cnt+1]=a[v]; dfs(v,root,cnt+1); } } visit[x]=0; } int main() { cin>>n; for(int i=1; i<=n; i++) { cin>>a[i]; ans=(ans+a[i])%mod; } for(int i=1; i<n; i++) { cin>>u>>v; add(u,v); add(v,u); } for(int i=1; i<n; i++) dfs(i,i,1); cout<<ans%mod; }