Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52793 | HSW | 树上排序 | C++ | 运行超时 | 0 | 4000 MS | 960 KB | 816 | 2022-07-20 11:58:11 |
#include <cstdio> using namespace std; int n,qt,cnt; const long long md=1e9+7; int q[200005]; struct rd{ int y; int nxt; }; rd a[2000005]; int h[200005]; int f[200005]; int sz[200005]; int dfn[200005]; int ds[200005]; long long ans,rks; void addd(int ax,int ay){ a[++qt].y=ay; a[qt].nxt=h[ax]; h[ax]=qt; } void dft(int u,int fa,int s,int ax){ rks=(rks+s*ax)%md; int i,v; for(i=h[u];i!=0;i=a[i].nxt){ v=a[i].y; if(v==fa) continue; if(q[v]>s) dft(v,u,s,ax); else dft(v,u,s,ax+1); } } int main(){ scanf("%d",&n); int i,ax,ay,j; for(i=1;i<=n;i++){ scanf("%d",&q[i]); } for(i=1;i<n;i++){ scanf("%d%d",&ax,&ay); addd(ax,ay); addd(ay,ax); } for(i=1;i<=n;i++){ rks=0; dft(i,0,q[i],1); ans+=rks; } printf("%lld\n",ans); return 0; }