社区讨论
WA on Subtask #1
P6554Promises I Can't Keep参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo89zo6z
- 此快照首次捕获于
- 2023/10/27 15:12 2 年前
- 此快照最后确认于
- 2023/10/27 15:12 2 年前
rt 看题面是链的数据,但是本地手模了一下链的数据感觉没问题()
CPP#include<bits/stdc++.h>
#define LL long long
#define inf 0x3f3f3f3f
using namespace std;
inline LL read(){
LL res=0,fl=1;
char ch=getchar();
while(!(ch>='0' && ch<='9')){if(ch=='-')fl=-1;ch=getchar();}
while(ch>='0' && ch<='9')res=(res<<3)+(res<<1)+ch-'0',ch=getchar();
return res*fl;
}
inline LL max(LL a,LL b){return a>b?a:b;}
inline LL min(LL a,LL b){return a<b?a:b;}
inline void swap(int &a,int &b){int c;c=a;a=b;b=c;}
const int MAXN=5e5+5;
LL n,rt,a[MAXN],f[MAXN],g[MAXN],cnt[MAXN],lef[MAXN];
vector<int> e[MAXN];
inline void dfs1(int x,int fa){
for(int i=0;i<e[x].size();i++){
int y=e[x][i];
if(y!=fa){
dfs1(y,x);
f[x]+=a[x]*cnt[y]+f[y];
cnt[x]+=cnt[y];
}
}
if(!cnt[x])f[x]=a[x],cnt[x]=1,lef[x]=1;
}
inline void dfs2(int x,int fa){
for(int i=0;i<e[x].size();i++){
int y=e[x][i];
if(y!=fa){
if(lef[y])g[y]=g[x]-a[x]+(cnt[rt]-2)*a[y];
else g[y]=g[x]-cnt[y]*a[x]+(cnt[rt]-cnt[y])*a[y];
dfs2(y,x);
}
}
}
int main() {
int x,y;
n=read();
for(int i=1;i<n;i++){
x=read(),y=read();
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)
if(e[i].size()>1)rt=i;
dfs1(rt,0);
g[rt]=f[rt];
dfs2(rt,0);
double ans=-inf;
for(int i=1;i<=n;i++)
ans=max(ans,(double)g[i]/(cnt[rt]-lef[i]));
printf("%.4lf",ans);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...