hdu4035 Maze 题解
2024-09-07 13:32:12
/*
设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。
E[i] = ki*E[1] + (1-ki-ei)*E[fa[i]] + (1-ki-ei);
E[i] = ki*E[1] + (1-ki-ei)/siz[i]*E[fa[i]] + (1-ki-ei)/siz[i]*∑(E[child[i]]) + (1-ki-ei);
设对每个结点:E[i] = Ai*E[1] + Bi*E[fa[i]] + Ci;
∑(E[child[i]]) = ∑E[j] = ∑(Aj*E[1] + Bj*E[i] + Cj)
带入得
(1 - (1-ki-ei)/siz[i]*∑Bj)*E[i] = (ki+(1-ki-ei)/siz[i]*∑Aj)*E[1] + (1-ki-ei)/siz[i]*E[fa[i]] + (1-ki-ei) + (1-ki-ei)/siz[i]*∑Cj;
Ai = (ki+(1-ki-ei)/siz[i]*∑Aj) / (1 - (1-ki-ei)/siz[i]*∑Bj);
Bi = (1-ki-ei)/siz[i] / (1 - (1-ki-ei)/siz[i]*∑Bj);
Ci = ( (1-ki-ei)+(1-ki-ei)/siz[i]*∑Cj ) / (1 - (1-ki-ei)/siz[i]*∑Bj);
E[1] = A1*E[1] + B1*0 + C1;
E[1] = C1 / (1 - A1);
上述式子中若分母为零则无解
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=1e4+5;
struct edge
{
int v,nxt;
}ep[maxn<<1];
int hd[maxn],kh;
double k[maxn],e[maxn],a[maxn],b[maxn],c[maxn];
int n,t,siz[maxn];
void add(int u,int v) {ep[++kh]=(edge){v,hd[u]};hd[u]=kh;}
bool dfs(int u,int fa)
{
double x1=0;
a[u]=k[u];b[u]=(1-k[u]-e[u])/siz[u];c[u]=1-k[u]-e[u];
for(int i=hd[u];i!=-1;i=ep[i].nxt)
{
if(ep[i].v==fa) continue;
if(!dfs(ep[i].v,u)) return 0;
a[u]+=b[u]*a[ep[i].v];
x1+=b[u]*b[ep[i].v];
c[u]+=b[u]*c[ep[i].v];
}
if(1-x1<1e-9) return 0;
a[u]/=1-x1;b[u]/=1-x1;c[u]/=1-x1;
return 1;
}
int main()
{
int u,v;
scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
memset(hd,-1,sizeof(hd));kh=0;memset(siz,0,sizeof(siz));
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
add(u,v);add(v,u);siz[u]++;siz[v]++;
}
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",k+i,e+i);
k[i]/=100;e[i]/=100;
}
printf("Case %d: ",ca);
if(dfs(1,0)&&fabs(1-a[1])>1e-9) printf("%lf\n",c[1]/(1-a[1]));
else printf("impossible\n");
}
return 0;
}
最新文章
- Discuz! X论坛上传附件到100%自动取消上传的原因及解决方案
- ajax操作时用于提高用户体验的两段备用代码
- [JS11] 状态栏滚动
- paip.提升安全性----Des加密 java php python的实现总结
- Android应用安全之Content Provider安全
- 在linux环境下配置node:node + npm + forever
- DedeCMS数据负载性能优化方案简单几招让你提速N倍
- 关于ODP.NET连接数监控及相应的windbg分析提示
- PhotoSwipe源码解读系列(二)
- Django 系列博客(十一)
- SVN分支与合并【超详细的图文教程】(转载)
- Android 框架 Afinal使用
- JAVA深入研究——Method的Invoke方法(转)
- AI 随机梯度下降(SGD)
- Jmeter常见问题及场景应用
- 关于iPhone音频的那些事
- 开源网站访问统计系统Piwik
- 使用area标签实现标签的嵌套
- NOI2005 维护数列(splay)
- 转载:隐藏bat窗口在后台运行(找了好久)
热门文章
- seo 回忆录百度基本概念(一)
- sort()实现排序的原理
- php continue 跳出多重循环
- 数组的forEach和map和for方法的区别
- 2019-2020-1 20199329《Linux内核原理与分析》第四周作业
- Inno Setup 大师 Tlama
- [Windows] Diskpart Scripts and Examples
- 现代软件工程讲义 如何提出靠谱的项目建议 NABCD
- 什么是动态规划?动态规划的意义是什么?https://www.zhihu.com/question/23995189
- 日常开发中常用的linux命令