算是比较经典的高斯消元应用了
设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来
然后因为所有f都是未知数,高斯消元即可(记得输出大难的时候除以总概率和)

#include<iostream>
#include<cstdio>
using namespace std;
const int N=305;
int n,m,d[N],h[N],cnt;
double a[N][N],f[N],p,q,ans;
struct qwe
{int ne,to;
}e[N*N*2];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
int add(int u,int v)
{cnt++;d[u]++;e[cnt].ne=h[u];e[cnt].to=v;h[u]=cnt;
}
void gaosi()
{for(int i=1;i<=n;i++){int nw=i;for(int j=i+1;j<=n;j++)if(a[j][i]>a[nw][i])nw=j;for(int j=i;j<=n+1;j++)swap(a[i][j],a[nw][j]);for(int j=i+1;j<=n+1;j++)a[i][j]/=a[i][i];a[i][i]=1;for(int j=i+1;j<=n;j++){for(int k=i+1;k<=n+1;k++)a[j][k]-=a[j][i]*a[i][k];a[j][i]=0;}}// for(int i=1;i<=n;i++)// {// int nw=i;// for(int j=i;j<=n;j++)// if(a[j][i]>a[nw][i])// nw=j;// if(nw!=i)// for(int j=i;j<=n+1;j++)// swap(a[nw][j],a[i][j]);// for(int j=i+1;j<=n;j++)// {// double t=a[j][i]/a[i][i];// for(int k=i;k<=n+1;k++)// a[j][k]-=t*a[i][k];// }// }for(int i=n;i>=1;i--){for(int j=n;j>i;j--)a[i][n+1]-=f[j]*a[i][j];f[i]=a[i][n+1]/a[i][i];}
}
int main()
{n=read(),m=read(),p=read(),q=read();for(int i=1;i<=m;i++){int x=read(),y=read();add(x,y),add(y,x);}for(int i=1;i<=n;i++){a[i][i]+=1;for(int j=h[i];j;j=e[j].ne)a[e[j].to][i]-=(1-p/q)/d[i];}a[1][n+1]+=1-p/q;gaosi();for(int i=1;i<=n;i++)ans+=f[i];for(int i=1;i<=n;i++)printf("%.9lf\n",f[i]/ans);return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/9089708.html

bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】相关推荐

  1. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  2. [BZOJ 1778][Usaco2010 Hol]Dotp 驱逐猪猡

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 690  Solved: 269 [Sub ...

  3. BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP

    思路和BZOJ 博物馆很像. 同样是高斯消元 #include <map> #include <ctime> #include <cmath> #include & ...

  4. BZOJ 1778 [Usaco2010 Hol] Dotp 驱逐猪猡

    Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44, ...

  5. bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡

    http://www.elijahqi.win/archives/3299 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= ...

  6. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡

    Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44, ...

  7. BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元

    题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...

  8. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡(高斯消元+期望dp)

    传送门 解题思路 设\(f(x)\)表示到\(x\)这个点的期望次数,那么转移方程为\(f(x)=\sum\frac{f(u)*(1 - \frac{p}{q})}{deg(u)}\),其中\(u\) ...

  9. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元

    这个还挺友好的,自己相对轻松能想出来~ 令 $f[i]$ 表示起点到点 $i$ 的期望次数,则 $ans[i]=f[i]\times \frac{p}{q}$ #include <cmath&g ...

最新文章

  1. mint-UI引用后样式不对
  2. Docker_基础知识
  3. .NET Core TDD 前传: 编写易于测试的代码 -- 依赖项
  4. methodhandle_概览Java 7 MethodHandle及其用法
  5. C++基础1 数据类型 常量
  6. 【LeetCode笔记】35. 搜索插入位置(Java、二分法)
  7. 模板模式(Template)
  8. 从医疗数字化转型谈何为中台
  9. 因为一个字符校对问题,我的大厂面试挂了
  10. 控制鼠标滚动,滚动指定的距离
  11. 在FFMPEG中使用libRTMP的经验
  12. MATLAB程序(入门)
  13. 双层玻璃窗的功效模型matlab,《数学模型》课程设计--三层玻璃窗的保暖功效.doc...
  14. 鸿蒙开发工具下载设置Mac
  15. m4s格式转换mp3_amr转换mp3格式文件
  16. 局域网传输文件详解(转)
  17. 趋势追踪交易课堂:复盘的意义和方法
  18. 高频算法题冒险之旅精讲(一)之LeetCode小牛试刀五道题
  19. 如何利用小红书进行产品营销?小红书营销技巧有哪些?
  20. 爪哇国新游记之三----自创动态数组类

热门文章

  1. Rasa原文--Rules
  2. C++ 加 EasyX简易绘图实例
  3. mssql查询括号前的数据及括号中的数据
  4. 读“学习英语的方法”有感
  5. haroopad下载及安装
  6. 流媒体分析之srt 协议libsrt 实现
  7. 【报错】overleaf不能成功编译中文(在线latex)
  8. Eclipse不支持tomcat9解决方法
  9. 写好shell脚本的8个建议
  10. rank()函数 mysql_在MySQL中实现Rank高级排名函数