●Joyoi Dotp 驱逐猪猡
题链:
http://www.joyoi.cn/problem/tyvj-2610
题解:
期望dp,高斯消元
对于每一种到达i点的方案,都存在一个概率p,
令dp[i]表示到达i点的期望次数,那么容易由期望的定义得出:
dp[i]=p1*1+p2*1+p3*1+......(每个概率对应的权值都为1)
如果我们知道了每个点的期望的到达次数,那么在该点期望的爆炸次数=期望的到达次数*P/Q
就可以求出一个SUM=dp[1]+dp[2]+...+dp[N]
然后每个点的爆炸的概率就是(dp[i]*P/Q)/(SUM*P/Q)=dp[i]/SUM
(因为期望的权值都为1,所以概率的比例就等于期望的比例)
这种解法,更容易理解。
http://blog.csdn.net/neither_nor/article/details/52292240
如果在每个点爆炸的概率不同的话,那应该只能像这个拆点的方法做了。
没有SPJ,输出9位小数才能过2333
代码:
#include<bits/stdc++.h>
#define MAXN 305
using namespace std;
const double eps=1e-8;
struct Edge{
int ent;
int to[MAXN*MAXN*2],nxt[MAXN*MAXN*2],head[MAXN];
Edge():ent(2){}
void Adde(int u,int v){
to[ent]=v; nxt[ent]=head[u]; head[u]=ent++;
to[ent]=u; nxt[ent]=head[v]; head[v]=ent++;
}
}E;
double a[MAXN][MAXN],dp[MAXN],K,SUM;
double *A[MAXN];
int cnt[MAXN];
int N,M,P,Q;
int dcmp(double x){
if(fabs(x)<eps) return 0;
return x>0?1:-1;
}
void buildequation(){
for(int i=1;i<=N;i++){
a[i][i]=-1;
if(i==1) a[i][N+1]=-1;
for(int e=E.head[i];e;e=E.nxt[e]){
int j=E.to[e];
a[i][j]=K*1.0/cnt[j];
}
}
for(int i=1;i<=N;i++) A[i]=a[i];
}
void Gausselimination(int pos,int i){
if(pos==N+1||i==N+1) return;
for(int j=pos;j<=N;j++) if(dcmp(A[pos][i])!=0){
swap(A[j],A[pos]); break;
}
if(dcmp(A[pos][i])!=0)
for(int j=pos+1;j<=N;j++){
double k=A[j][i]/A[pos][i];
for(int l=i;l<=N+1;l++)
A[j][l]-=k*A[pos][l];
}
Gausselimination(pos+(dcmp(A[pos][i])!=0),i+1);
if(dcmp(A[pos][i])!=0){
for(int l=i+1;l<=N;l++)
dp[i]+=A[pos][l]*dp[l];
dp[i]=A[pos][N+1]-dp[i];
dp[i]=dp[i]/A[pos][i];
}
}
int main(){
ios::sync_with_stdio(0);
cin>>N>>M>>P>>Q;
K=(1-1.0*P/Q);
for(int i=1,u,v;i<=M;i++)
cin>>u>>v,E.Adde(u,v),
cnt[u]++,cnt[v]++;
buildequation();
Gausselimination(1,1);
for(int i=1;i<=N;i++) SUM+=dp[i];
cout<<fixed<<setprecision(9);
for(int i=1;i<=N;i++) cout<<fabs(dp[i]/SUM)<<endl;
return 0;
}
●Joyoi Dotp 驱逐猪猡的更多相关文章
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 563 Solved: 216[Submi ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
[BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
- BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡
首先我们列出转移矩阵$M$,$M_{i, j} = \frac {1 - \frac{p} {q}} {deg[i]}$(i,j之间有边)or $M_{i, j} = 0$(i,j之间没边) 则这个矩 ...
- bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元)
[题意] 炸弹从1开始运动,每次有P/Q的概率爆炸,否则等概率沿边移动,问在每个城市爆炸的概率. [思路] 设M表示移动一次后i->j的概率.Mk为移动k次后的概率,则有: Mk=M^k 设S= ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡
题解: 网上有一种复杂的方法..好像复杂度并没有优势就没看 定义f[i]表示i的期望经过次数,f[i]=sigma{f[j]*p/q/du[j]}+(i==1); 然后高斯消元就可以了 最后求出来的f ...
- 【BZOJ】1778: [Usaco2010 Hol]Dotp 驱逐猪猡
[题意]给定无向图,炸弹开始在1,在每个点爆炸概率Q=p/q,不爆炸则等概率往邻点走,求在每个点爆炸的概率.n<=300. [算法]概率+高斯消元 [题解]很直接的会考虑假设每个点爆炸的概率,无 ...
随机推荐
- 冲刺No.4
Alpha冲刺第四天 站立式会议 项目进展 今日团队开始对项目的核心功能中的事务管理员模块与学生模块进行了编码,主要内容是对学生基本信息的增删改与事务管理员信息的增删改,这部分的内容是整个项目最基础的 ...
- python 进程复习
import os import time ret = os.fork() # 创建子线程 if ret ==0: # 子进程中返回值为0,父进程>0 while True: print('.. ...
- decltype操作符
关于decltype操作符的说明: 1.在C++中,decltype作为操作符,用于查询表达式的数据类型.decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些 ...
- C++高效安全的运行时动态类型转换
关键字:static_cast,dynamic_cast,fast_dynamic_cast,VS 2015. OS:Window 10. C++类之间类型转换有:static_cast.dynami ...
- 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- kali rolling更新源之gpg和dirmngr问题
1.编辑 /etc/apt/source.list gedit /etc/apt/sources.list 输入更新源,可以选任何可用更新源,这里设置官方源 deb http://http.kali. ...
- Hadoop安装-部署-测试
一:准备Linux环境[安装略] a.修改主机名 vim /etc/sysconfig/network NETWORKING= ...
- java 细说String
String类内部用一个字符数组表示字符串,实例变量定义为: private final char value[]; String有两个构造方法,可以根据char数组创建String public S ...
- HTML mate标签
META标签分两大部分:HTTP标题信息(http-equiv)和页面描述信息(name). http-equiv http-equiv类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正 ...
- mysql的账户管理
mysql中账户管理:1 查看所有用户: 所有用户及权限信息都存储在mysql数据库中的user表中 查看user表的结构 desc user\G; 主要字段: host: 表示允许访问的主机 use ...