洛谷2973 [USACO10HOL]赶小猪Driving Out the Piggi… 概率 高斯消元
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - 洛谷2973
题意概括
有N个城市,M条双向道路组成的地图,城市标号为1到N。“西瓜炸弹”放在1号城市,保证城市1至少连接着一个其他城市。“西瓜炸弹”有P/Q的概率会爆炸,每次进入其它城市时,爆炸的概率相同。如果它没有爆炸,它会随机的选择一条道路到另一个城市去,对于当前城市所连接的每一条道路都有相同的可能性被选中。对于给定的地图,求每个城市“西瓜炸弹”爆炸的概率。
题解
通过概率关系构建方程:
其中in[j]表示节点j的出度,$F_i$ 表示最终在节点 $i$ 爆炸的概率。
$$F_i = \sum_{存在j到 i 的边}\cfrac{(1-\frac PQ)F_j}{in[j]}+\cfrac PQ \cdot [i=1]$$
然后高斯消元跑一跑就可以了。
代码
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int N=300+5;
const double Eps=1e-9;
int n,m,P,Q,cnt[N];
bool g[N][N];
double p,a[N][N],x[N];
void Gauss(){
int row=n,col=n,k,c;
for (k=c=1;k<=row,c<=col;k++,c++){
int Mk=k;
for (int i=k+1;i<=row;i++)
if (fabs(a[Mk][c])<fabs(a[i][c]))
Mk=i;
if (fabs(a[Mk][c])<Eps){
k--;
continue;
}
if (k!=Mk)
for (int i=c;i<=col+1;i++)
swap(a[k][i],a[Mk][i]);
for (int i=k+1;i<=row;i++)
for (int j=col+1;j>=c;j--)
a[i][j]=a[i][j]-a[k][j]*a[i][c]/a[k][c];
}
memset(x,0,sizeof x);
for (int i=k;i>=1;i--){
x[i]=a[i][n+1];
for (int j=i+1;j<=n;j++)
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&P,&Q);
p=double(P)/double(Q);
memset(g,0,sizeof g);
memset(cnt,0,sizeof cnt);
for (int i=1,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
g[a][b]=g[b][a]=1;
cnt[a]++,cnt[b]++;
}
memset(a,0,sizeof a);
a[1][n+1]=p;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++){
if (i==j){
a[i][j]=1;
continue;
}
if (!g[i][j])
continue;
double del=(1.0-p)/double(cnt[j]);
a[i][j]-=del;
}
Gauss();
for (int i=1;i<=n;i++)
if (fabs(x[i])<Eps)
x[i]=0;
for (int i=1;i<=n;i++)
printf("%.9lf\n",x[i]);
return 0;
}
以前打错的公式就让他暂时存一下吧……

洛谷2973 [USACO10HOL]赶小猪Driving Out the Piggi… 概率 高斯消元的更多相关文章
- [Luogu2973][USACO10HOL]赶小猪Driving Out the Piggi…
题目描述 The Cows have constructed a randomized stink bomb for the purpose of driving away the Piggies. ...
- 洛谷P2973 [USACO10HOL]赶小猪(高斯消元 期望)
题意 题目链接 Sol 设\(f[i]\)表示炸弹到达\(i\)这个点的概率,转移的时候考虑从哪个点转移而来 \(f[i] = \sum_{\frac{f(j) * (1 - \frac{p}{q}) ...
- 洛谷P2973 [USACO10HOL]赶小猪
https://www.luogu.org/problemnew/show/P2973 dp一遍,\(f_i=\sum_{edge(i,j)}\frac{f_j\times(1-\frac{P}{Q} ...
- Luogu P2973 [USACO10HOL]赶小猪Driving Out the Piggi 后效性DP
有后效性的DP:$f[u]$表示到$u$的期望次数,$f[u]=\Sigma_{(u,v)} (1-\frac{p}{q})*f[v]*deg[v]$,最后答案就是$f[u]*p/q$ 刚开始$f[1 ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...
- 洛谷 P3904 三只小猪
题目背景 你听说过三只小猪的故事吗?这是一个经典的故事.很久很久以前,有三只小猪.第一只小猪用稻草建的房子,第二个小猪用木棍建的房子,第三个小猪则使用砖做为材料.一只大灰狼想吃掉它们并吹倒了稻草和木棍 ...
- 洛谷2971 [USACO10HOL]牛的政治Cow Politics
原题链接 假设只有一个政党,那么这题就退化成求树的直径的问题了,所以我们可以从此联想至\(k\)个政党的情况. 先处理出每个政党的最大深度,然后枚举每个政党的其它点,通过\(LCA\)计算长度取\(\ ...
- 【洛谷U20626】gemo 容斥 FWT 高斯消元
题目大意 给你一个无向图,有\(m\)个询问,每次给你一个点\(x\)和一个点集\(S\),问你从\(x\)开始走,每次从一个点随机的走到与这个点相邻的点,问你访问\(S\)中每个点至少一次的期望步数 ...
随机推荐
- WIN10下安装USB转串口驱动出现“文件的哈希值不在指定的目录”的解决办法
今天安装openJTAG驱动时出现“文件的哈希值不在指定的目录”,系统为WIN10专业版. 原因是驱动无数字签名,在WIN10中是不安全的驱动,所以显示哈希值不在范围内不能安装. 经查阅已经解决,发放 ...
- 绘图QPainter-画笔
绘图要在paintEvent()方法中实现.在QPainter对象的begin()与end()方法间编写绘图代码.它会在控件或其他图形设备上进行低级的图形绘制 画笔样式Penstyle Qt.Nope ...
- Java EE之Hibernate异常总结【2】Field 'id' doesn't have a default value
Field 'id' doesn't have a default value问题解决方法 因为assigned是指主键是由人工分配的,而native则指主键值由库自动给出. <generato ...
- yo install generator-gulp-react遇到UNMET PEER DEPENDENCY问题
最近在用yeoman下载下来的框架配置react环境 yo install generator-gulp-react安装框架包 遇到了 UNMET PEER DEPENDENCY问题 找不到依赖的gu ...
- 【vue报错】——listen EADDRINUSE :::8080 解决方案
题原因: 此项错误表示 8080 端口被占用 解决方案一: 打开cmd输入:netstat -ano|findstr "8080"查看所有端口信息,并通过findstr “8080 ...
- android greenDao使用
github:https://github.com/greenrobot/greenDAO 基本使用:https://toutiao.io/posts/yg1kyu/preview https://b ...
- Jenkins与网站代码上线解决方案【转】
转自 Jenkins与网站代码上线解决方案 - 惨绿少年 https://www.nmtui.com/clsn/lx524.html 1.1 前言 Jenkins是一个用Java编写的开源的持续集成工 ...
- python3爬虫中文乱码之请求头‘Accept-Encoding’:br 的问题
当用python3做爬虫的时候,一些网站为了防爬虫会设置一些检查机制,这时我们就需要添加请求头,伪装成浏览器正常访问. header的内容在浏览器的开发者工具中便可看到,将这些信息添加到我们的爬虫代码 ...
- git命令行提交并且同步到远程代码库
远程代码库以github为例 1.打开 git bash 2.进入项目目录 cd /e/myGitProjects/test 3.提交到本地git仓库 git add -Agit commit -m ...
- react之异步请求数据,render先行渲染报错,未拿到数据
import React from 'react' import {connect} from 'react-redux' import { Redirect} from 'react-router- ...