Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52773 lzqy_ 树上排序 C++ 运行超时 40 4000 MS 15956 KB 1428 2022-07-20 11:52:55

Tests(4/10):


#include<bits/stdc++.h> #define il inline using namespace std; const int mod=1e9+7; const int maxn=500010; const int N=maxn<<2; il int read(){ int x=0; char c=getchar(); for(;!(c>='0'&&c<='9');c=getchar()); for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+c-'0'; return x; } struct edge{ int v,to; }e[maxn<<1]; int f[maxn],Tap[maxn]; int a[maxn],ans,val1,val2; int n; int head[maxn],ecnt; void addedge(int u,int v){ e[++ecnt].v=v,e[ecnt].to=head[u],head[u]=ecnt; } void update(int &x,int y){if((x+=y)>=mod)x-=mod;} void dfs(int fa,int x,int rt){ if(a[x]<a[rt]) f[x]++; update(ans,(f[x]+1)*1ll*a[rt]%mod); update(ans,val1*1ll*a[rt]%mod); update(ans,val2*1ll*a[rt]%mod); update(ans,val1*1ll*f[x]%mod*a[rt]%mod); for(int i=head[x];i;i=e[i].to) if(e[i].v^fa) f[e[i].v]=f[x],dfs(x,e[i].v,rt); } void DFS(int fa,int x){ val2+=f[x],val1++,Tap[f[x]]++; for(int i=head[x];i;i=e[i].to) if(e[i].v^fa) DFS(x,e[i].v); } void clear(int fa,int x){ Tap[f[x]]--,f[x]=0; for(int i=head[x];i;i=e[i].to) if(e[i].v^fa) clear(x,e[i].v); } int main(){ n=read();int x,y; for(int i=1;i<=n;i++) a[i]=read(); for(int i=1;i<n;i++){ x=read(),y=read(); addedge(x,y),addedge(y,x); } for(int i=1;i<=n;i++){ val1=val2=0; for(int j=head[i];j;j=e[j].to){ dfs(i,e[j].v,i),DFS(i,e[j].v); }update(ans,a[i]); clear(0,i); } printf("%d\n",ans); return 0; }


测评信息: