/*
设 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;
}

最新文章

  1. Discuz! X论坛上传附件到100%自动取消上传的原因及解决方案
  2. ajax操作时用于提高用户体验的两段备用代码
  3. [JS11] 状态栏滚动
  4. paip.提升安全性----Des加密 java php python的实现总结
  5. Android应用安全之Content Provider安全
  6. 在linux环境下配置node:node + npm + forever
  7. DedeCMS数据负载性能优化方案简单几招让你提速N倍
  8. 关于ODP.NET连接数监控及相应的windbg分析提示
  9. PhotoSwipe源码解读系列(二)
  10. Django 系列博客(十一)
  11. SVN分支与合并【超详细的图文教程】(转载)
  12. Android 框架 Afinal使用
  13. JAVA深入研究——Method的Invoke方法(转)
  14. AI 随机梯度下降(SGD)
  15. Jmeter常见问题及场景应用
  16. 关于iPhone音频的那些事
  17. 开源网站访问统计系统Piwik
  18. 使用area标签实现标签的嵌套
  19. NOI2005 维护数列(splay)
  20. 转载:隐藏bat窗口在后台运行(找了好久)

热门文章

  1. seo 回忆录百度基本概念(一)
  2. sort()实现排序的原理
  3. php continue 跳出多重循环
  4. 数组的forEach和map和for方法的区别
  5. 2019-2020-1 20199329《Linux内核原理与分析》第四周作业
  6. Inno Setup 大师 Tlama
  7. [Windows] Diskpart Scripts and Examples
  8. 现代软件工程讲义 如何提出靠谱的项目建议 NABCD
  9. 什么是动态规划?动态规划的意义是什么?https://www.zhihu.com/question/23995189
  10. 日常开发中常用的linux命令