FJUTOJ 校赛J 第十集 原来这一切都是真的 (树形概率dp)
来源:互联网 发布:腾讯代理绝地求生知乎 编辑:程序博客网 时间:2024/06/13 21:24
题意:
有n个点组成的树,叶子节点是门,门有守卫的概率是这个点的编号/n,如果一个点连接的门的守卫个数或者路口的守卫个数时奇数那么这个点要设置一个守卫,问0也就是树根没有守卫的概率。
题解:
dp[u]表示树上节点u有守卫的概率,对于某个点u,以及儿子v,dp[u]=(1-dp[u])*dp[v]+dp[u]*(1-dp[v]),此时dp[u]可以表示在到v这个儿子为止守卫是奇数的概率(也就是这个点有守卫的概率),那么1-dp[u]就是表示守卫是偶数的概率,于是就可以和下一个儿子继续利用此公式dp[u]=(1-dp[u])*dp[v]+dp[u]*(1-dp[v]).
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<queue>#include<map>#include<set>#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int& a,int b){ if(b<a)a=b; }void cmax(ll& a,ll b){ if(b>a)a=b; }void cmin(ll& a,ll b){ if(b<a)a=b; }void add(int& a,int b,int mod){ a=(a+b)%mod; }void add(ll& a,ll b,ll mod){ a=(a+b)%mod; }const int oo=0x3f3f3f3f;const ll MOD=100000007;double dp[100005];struct EDGE{ int u,v,next;}E[200005];int head[100005],tol;int n; void Init(){ memset(head,-1,sizeof head); tol=0;} void add_edge(int u,int v){ E[tol].v=v; E[tol].next=head[u]; head[u]=tol++;} void tree_dp(int u,int pre){ dp[u]=0.0; int f=0; for(int i=head[u];i!=-1;i=E[i].next){ int v=E[i].v; if(v==pre)continue; f=1; tree_dp(v,u); dp[u]=dp[u]*(1.0-dp[v])+(1.0-dp[u])*dp[v]; } if(!f) dp[u]=1.0-1.0*u/n;} int main(){ int T,u,v; scanf("%d",&T); while(T--){ scanf("%d",&n); Init(); for(int i=1;i<n;i++){ scanf("%d %d",&u,&v); add_edge(u,v); add_edge(v,u); } tree_dp(0,-1); printf("%.6lf\n",1.0-dp[0]); } return 0;}
0 0
- FJUTOJ 校赛J 第十集 原来这一切都是真的 (树形概率dp)
- bzoj3727 (这真的是树形DP?)
- 【BZOJ3566】概率充电器,树形概率DP
- bzoj3566:概率充电器(树形概率dp)
- hdu 4035 Maze 概率DP+树形DP
- HDU 4035 Maze 概率dp+树形dp
- 【BZOJ3566】【SHOI2014】概率充电器 树形DP 概率DP
- bzoj 3566: [SHOI2014]概率充电器 概率dp+树形dp
- BZOJ3566:概率充电器(树形dp & 概率dp)
- (简单) 树形dp+概率 POJ 3071 Football
- (概率+树形)dp HDU 4035 Maze
- bzoj 3566: [SHOI2014]概率充电器 树形DP
- hdu 4035 Maze (树形概率dp)
- HDU 4443 Lost 树形概率DP
- codeforces 500d 树形dp和概率
- HDU 4219 Randomization? 树形概率DP
- DP之数位,概率,树形总结
- HDU 4219 Randomization?(树形概率DP)
- .net调用平台命令
- Xamarin体验:使用C#开发iOS/Android应用
- Golang开发环境搭建-Vim篇
- mutex 测试程序
- Android EditText/TextView使用SpannableString显示复合文本
- FJUTOJ 校赛J 第十集 原来这一切都是真的 (树形概率dp)
- C++快速排序(随机值元法)
- Log4j的输出日志级别
- maven项目在eclipse中运行clean test 等报错
- 关于动态代理模式
- Linux 上tomcat的安装
- objc block的介绍和使用
- 再造 “手机QQ” 侧滑菜单(一)——实现侧滑效果
- 网络流