P11736 [集训队互测 2015] 胡策的小树
题意
给定一棵
初始每个节点上有一枚棋子,每一时刻开始,
现在要进行这些操作
你现在可以进行一次操作:
分析
考虑
设
考虑怎么求
考虑树上高消,那么我们就需要求出
两边同时减去
而不难发现
这样就得出了
考虑
int n,a[maxn];
vector<int>G[maxn];
int root[maxn];
int siz[maxn];
vector<int>v[maxn];
int fa[maxn];
double f[maxn],p[maxn];
double sum,res;
int dfn[maxn],dfncnt,nfd[maxn];
void dfs0(int x){
dfn[x]=++dfncnt,nfd[dfncnt]=x,siz[x]=1;
for(int u:G[x])dfs0(u),siz[x]+=siz[u];
}
void dfs(int x){
sum+=f[x],res+=f[x]*p[x];
for(int u:G[x]){
f[u]=f[x]*siz[u]/siz[x]/p[u];
dfs(u);
}
}
double solve(int d){
const int rt=root[d];
sum=res=0,f[rt]=1;
rep(i,dfn[rt],dfn[rt]+siz[rt]-1){
const int u=nfd[i];
p[u]=1.0*((a[u]+d)%n)/n;
}
dfs(rt);
return res/sum;
}
inline void solve_the_problem(){
n=rd();
rep(i,1,n)fa[i]=rd(),G[fa[i]].emplace_back(i);
rep(i,1,n)a[i]=rd(),root[(n-a[i])%n]=i;
dfs0(1);
double ans=0;
rep(i,0,n-1)ckmx(ans,solve(i));
printf("%.12lf",ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现