Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52879 | AK2022071322 | 树上排序 | C++ | 运行出错 | 0 | 3942 MS | 2192 KB | 867 | 2022-07-20 12:06:02 |
#include <bits/stdc++.h> using namespace std; int n,ans; int a[410]; int b[410][410]; int f[410][410]; int t[410]; int v[410]; void dfs(int s,int now,int tot) { if(v[now]==1) { return; } t[tot++]=a[now]; sort(t,t+tot); int cnt=0; for(int i=0; i<tot; i++) { cnt+=t[i]*(i+1); } f[s][now]=max(f[s][now],cnt); for(int i=0; i<n; i++) { if(b[now][i]==1) { v[now]=1; dfs(s,i,tot+1); v[now]=0; } } } int main() { cin>>n; for(int i=0; i<n; i++) { cin>>a[i]; } for(int i=0; i<n-1; i++) { int t1,t2; cin>>t1>>t2; b[t1][t2]=b[t2][t1]=1; } for(int i=0; i<n; i++) { dfs(i,i,0); } for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { ans+=max(f[i][j],f[j][i]); } } cout<<ans<<endl; return 0; }