1 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e6+2; int n,a[N],fa[N],sz[N]; long long ans; struct edge{int x,y;bool operator<(edge o)const{return max(a[x],a[y])<max(a[o.x],a[o.y]);}}e[N]; int find(int k){return fa[k]==k?k:fa[k]=find(fa[k]);} void solve(){ for(int i=1;i<=n;i++)fa[i]=i,sz[i]=1; sort(e+1,e+n); for(int i=1;i<n;i++){ int x=find(e[i].x),y=find(e[i].y); ans+=(long long)max(a[e[i].x],a[e[i].y])*sz[x]*sz[y]; fa[x]=y,sz[y]+=sz[x]; } } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<n;i++)cin>>e[i].x>>e[i].y; solve();for(int i=1;i<=n;i++)a[i]=-a[i];solve(); cout<<ans; }
- 1
信息
- ID
- 6874
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者