社区讨论

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 条回复,欢迎继续交流。

正在加载回复...