2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=1010; struct Node{int fa,last,nxt,siz;double w,sw;}a[N]; priority_queue< pair<double ,int > >q; bool vis[N]; int main() { int n,rt;scanf("%d%d",&n,&rt); for(int i=1;i<=n;++i) { scanf("%lf",&a[i].w); a[i].last=i; a[i].sw=a[i].w; a[i].siz=1; if(i!=rt) q.push({a[i].w,i}); } for(int i=1,x,y;i<n;++i) scanf("%d%d",&x,&y),a[y].fa=x; memset(vis,0,sizeof(vis)); while(!q.empty()) { int x=q.top().second;q.pop(); if(vis[x]) continue; vis[x]=1; int tx=a[x].fa;while(vis[tx] && tx!=rt) tx=a[tx].fa; a[a[tx].last].nxt=x; a[tx].last=a[x].last; a[tx].siz+=a[x].siz; a[tx].sw+=a[x].sw; if(tx!=rt) q.push({ a[tx].sw/a[tx].siz , tx }); } int ans=0;for(int i=1,x=rt;i<=n;++i,x=a[x].nxt) ans+=i*a[x].w; printf("%d\n",ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=1010; struct Node{int fa,last,nxt,siz;double w,sw;}a[N]; priority_queue< pair<double ,int > >q; bool vis[N]; int main() { int n,rt;scanf("%d%d",&n,&rt); for(int i=1;i<=n;++i) { scanf("%lf",&a[i].w); a[i].last=i; a[i].sw=a[i].w; a[i].siz=1; if(i!=rt) q.push({a[i].w,i}); } for(int i=1,x,y;i<n;++i) scanf("%d%d",&x,&y),a[y].fa=x; memset(vis,0,sizeof(vis)); while(!q.empty()) { int x=q.top().second;q.pop(); if(vis[x]) continue; vis[x]=1; int tx=a[x].fa;while(vis[tx] && tx!=rt) tx=a[tx].fa; a[a[tx].last].nxt=x; a[tx].last=a[x].last; a[tx].siz+=a[x].siz; a[tx].sw+=a[x].sw; if(tx!=rt) q.push({ a[tx].sw/a[tx].siz , tx }); } int ans=0;for(int i=1,x=rt;i<=n;++i,x=a[x].nxt) ans+=i*a[x].w; printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 1139
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 2
- 标签
- 递交数
- 41
- 已通过
- 27
- 上传者