BZOJ 3566 SHOI 2014 概率充电器 概率DP

题目大意:给出一棵树,每个节点都有一个充电概率,每一条边有一个导电概率,求期望有多少个点充电。

思路:写不出题解,粘一个详细的地址:http://wyfcyx.is-programmer.com/posts/74623.html

CODE:

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define EPS 1e-8
#define MAX 500010
using namespace std;

int points;
double src[MAX];

int head[MAX],total;
int _next[MAX << 1],aim[MAX << 1];
double length[MAX << 1];
int father[MAX];

double f[MAX][2],p[MAX];

inline void Add(int x,int y,double len)
{
	_next[++total] = head[x];
	aim[total] = y;
	length[total] = len;
	head[x] = total;
}

void DFS1(int x,int last)
{
	f[x][0] = 1.0 - src[x];
	father[x] = last;
	for(int i = head[x]; i; i = _next[i]) {
		if(aim[i] == last)	continue;
		p[aim[i]] = length[i];
		DFS1(aim[i],x);
		f[x][0] *= (f[aim[i]][0] + (1 - f[aim[i]][0]) * (1 - length[i]));
	}
}

void DFS2(int x,int last)
{
	for(int i = head[x]; i; i = _next[i]) {
		if(aim[i] == last)	continue;
		double t = f[aim[i]][0] + (1 - f[aim[i]][0]) * (1 - length[i]);
		double _p = t < EPS ? 0:f[x][1] * f[x][0] / t;
		f[aim[i]][1] = _p + (1 - _p) * (1 - length[i]);
		DFS2(aim[i],x);
	}
}

int main()
{
	cin >> points;
	for(int x,y,z,i = 1; i < points; ++i) {
		scanf("%d%d%d",&x,&y,&z);
		Add(x,y,(double)z / 100.0),Add(y,x,(double)z / 100.0);
	}
	for(int i = 1; i <= points; ++i) {
		scanf("%lf",&src[i]);
		src[i] /= 100.0;
	}
	DFS1(1,0);
	f[1][1] = 1;
	DFS2(1,0);
	double ans = .0;
	for(int i = 1; i <= points; ++i)
		ans += (1 - f[i][0] * f[i][1]);
	cout << fixed << setprecision(6) << ans << endl;
	return 0;
}



时间: 2024-10-10 01:48:57

BZOJ 3566 SHOI 2014 概率充电器 概率DP的相关文章

[bzoj 3566][SHOI 2014]概率充电器

传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电. 进入充电状态的元件个数的期望是多少呢? Solution \[ E=\sum f_i\ \ \ 其中f_i表示节点i通电的概率 \] 那么怎么求\(f_i\)呢?显然,一个点通电有三种情况:来自i的父亲节点.来自i的某个儿子节点.来自i自

bzoj 3566: [SHOI2014]概率充电器 树形DP

首先普及一个概率公式 P(A+B)=P(A)+P(B)-P(AB) 题意:一些充电元件和导线构成一棵树,充电元件是否能充电有2种情况, 1.它自己有qi%的概率充电 2.与它相邻的元件通过导线给它充电(导线有p%的概率导通) 求最终充了电的元件的期望 题解:首先可以将元件能否充电分成3种情况考虑, 1.它自己给自己充好了电 2.它的儿子方向给它传送了电 3.它的父亲方向给它传送了电. 对于1,题目已经给出可以直接赋值, 对于2,可以通过一次树的深度遍历求得.pson[now]=pson[now]

BZOJ3566 概率充电器 概率dp

哼我就要正着推 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3566 题意:节点有没有电看脸,线好不好看脸,问一个正常的亚洲人会给几个东西充上电. 我就正着推了怎么地首先,我们定义一下数组含义,$f[x]$表示这个点有电的概率,$g[x]$表示这个点被自己和儿子充上电的概率. [普及选修2-3知识] 概率的可加性:$P(X∨Y)=P(X)+P(Y)-P(X∧Y)$. 那么这样$g[x]$就很好推了:$g[x]=g[没有v的x概率]+g[v

BZOJ 3564 SHOI 2014 信号增幅仪 坐标变换+最小圆覆盖

题目大意:给出平面上的一些点,现在让你用一个长轴与x轴成一定角度的,长轴:短轴已知的椭圆来覆盖所有的坐标,求最小的短轴长度. 思路:很明显,这个椭圆的形状和放置状态已经给出了,但是没有办法求最小拖圆覆盖啊.采用坐标变换,将椭圆变成圆.首先我们先让长轴与x轴平行,将平面上的所有点都旋转这个角度.之后只需要让所有点的x坐标除以长轴:短轴就可以了.剩下的就是最小圆覆盖了. 注:坐标旋转公式: x' = x * cos(a) - y * sin(a) y' = x * sin(a) + y * cos(

【BZOJ】3566: [SHOI2014]概率充电器

[算法]树型DP+期望DP [题意]一棵树上每个点均有直接充电概率qi%,每条边有导电概率pi%,问期望有多少结点处于充电状态? [题解]引用自:[BZOJ3566][SHOI2014]概率充电器 树形DP 概率DP by 空灰冰魂 最大的难点在于计算每个点充电期望时,两个节点各自的期望都会影响对方的期望. 所以考虑转化对象,改为求每个节点充不上电的期望,充不上电就不用考虑两者的相互影响. fi表示结点i由子结点和自身充不上电的概率 gi表示结点i由父结点充不上电的概率 第一次DFS: hi表示

bzoj 3566: [SHOI2014]概率充电器

Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器:"采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!"SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电.作为 SHO

【bzoj3566】[SHOI2014]概率充电器 树形概率dp

题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电.作为 SHOI 公司的忠实客户,你无

TCO 2014 Round 1C 概率DP

TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover,肯定就是dp[l][r][n], 走了n步之后,左边cover了l,右边cover了r. 一开始DP没有搞清楚,这个要画一下图就更清楚了. 转移方程就是概率的传递方向. 1: double dp[505][505][2]; // l,r,n steps unsed; 2: class RedPain

【BZOJ3566】概率充电器(动态规划)

[BZOJ3566]概率充电器(动态规划) 题面 BZOJ Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧! " SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以从直