zoukankan      html  css  js  c++  java
  • [BZOJ3566][SHOI2014]概率充电器 换根树形DP

    链接

    题意:n个充电元件形成一棵树,每个点和每条边都有各自的充电概率,元件可以自身充电或者通过其他点和边间接充电,求充电状态元件的期望个数

    题解

    设1为根节点

    (f[x]) 表示 (x) 不从以 (x) 为根的子树中充电的概率 ,前提自己不充电,再乘上儿子不充电或者边不充电的概率,因此有

    [f[x]=(1-w[x])prod(1-(1-f[y]) imes w(x,y)) ]

    这样进行第一次DP

    再设 (g[x]) 表示 (x) 不充电的概率,他的前提是 (f[x]) 并且不从父亲上面充电。

    如果从父亲上面充电,前提是父亲从父亲的父亲充电并且边也充电,用1减去这个概率就是不从父亲充电的概率

    [g[y]=f[y] imes(1-w(x,y) imes(1-frac{g[x]}{1-(1-f[y]) imes w(x,y)})) ]

    据说这东西叫换根DP,反正就是两遍DP就是了

    #include<bits/stdc++.h>
    #define REP(i,a,b) for(int i(a);i<=(b);++i)
    using namespace std;
    typedef long long ll;
    inline int read(){char c;int w;
    	while(!isdigit(c=getchar()));w=c&15;
    	while(isdigit(c=getchar()))w=w*10+(c&15);return w;
    }
    template<typename T,typename U>inline char smax(T&x,const U&y){return x<y?x=y,1:0;}
    template<typename T,typename U>inline char smin(T&x,const U&y){return x>y?x=y,1:0;}
    const int n=read(),N=5e5+5;
    int head[N],tot;double w[N],f[N],g[N],ans;
    struct node{int v,nxt;double w;}e[N<<1];
    inline void add(int x,int y,double z){e[++tot].v=y,e[tot].w=z,e[tot].nxt=head[x];head[x]=tot;}
    void go(int x,int fa){
    	f[x]=1-w[x];
    	for(int i=head[x];i;i=e[i].nxt){
    		const int&y=e[i].v;
    		if(y!=fa){
    			go(y,x);
    			f[x]*=1-(1-f[y])*e[i].w;
    		}
    	}
    }
    void dfs(int x,int fa){
    	ans+=1-g[x];
    	for(int i=head[x];i;i=e[i].nxt){
    		const int&y=e[i].v;
    		if(y!=fa){
    			if((1-(1-f[y])*e[i].w)>1e-8)g[y]=f[y]*(1-(1-g[x]/(1-(1-f[y])*e[i].w))*e[i].w);
    			else g[y]=f[y];
    			dfs(y,x);
    		}
    	}
    }
    int main(){
    	REP(i,2,n){
    		int x=read(),y=read();double z=read()/100.;
    		add(x,y,z),add(y,x,z);
    	}
    	REP(i,1,n)w[i]=read()/100.;ans=0;
    	go(1,0);g[1]=f[1];dfs(1,0);printf("%f
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    Eclipse配置Lifery SDK步骤与错误解决。
    Java Math floor round ceil 函数
    jpa多表leftjoin 查询,自定义返回结果
    saml2协议sp-initial登录过程
    httpclientutil
    解决samlexception-inresponsetofield-of-the-response-doesnt-correspond-to-sent-mess
    spring boot 整合saml2
    使用redis防止重复提交
    mysql转化时间戳毫秒到秒
    javamail 附件以及正文加图片
  • 原文地址:https://www.cnblogs.com/HolyK/p/9885430.html
Copyright © 2011-2022 走看看