bzoj1778 驱赶猪猡/luogu2937 赶小猪

Description

一个无向图,节点1有一个炸弹,在每个单位时间内,有可能在这个节点炸掉,也有p/q的概率随机选择一条出去的路到其他的节点上。问最终炸弹在每个节点上爆炸的概率。

bzoj权限题,题目大概是机翻?

bzoj3270的双倍经验题(然而我大于小于分不清楚还WA了一发)

//%std
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define lovelive long long
#define lc son[x][0]
#define rc son[x][1]
#define lowbit(x) (x&(-x))
#define pt vc
#define P(x,y) ((x)*n-n+y)
const int N=300+30;
void read(int &x)
{
  int p=1;
  x=0;
  char c=getchar();
  while(c<‘0‘||c>‘9‘)
  {
    if(c==‘-‘)
      p=-1;
    c=getchar();
  }
  while(c>=‘0‘&&c<=‘9‘)
  {
      x=x*10+c-48;
      c=getchar();
  }
  x*=p;
}
double f[N][N],ans[N];
int mp[N][N],d[N];
void gauss(int n)
{
  int k;
  double tmp;
  for(int i=1;i<n;i++)
  {
      k=i;
      for(int j=i+1;j<=n;j++)
        if(fabs(f[i][i])<fabs(f[j][i]))
          k=j;
    for(int j=1;j<=n+1;j++)
      swap(f[i][j],f[k][j]);
    for(int j=i+1;j<=n;j++)
    {
      tmp=f[j][i]/f[i][i];
      for(int k=i;k<=n+1;k++)
        f[j][k]-=f[i][k]*tmp;
    }
  }
  for(int i=n;i>=1;i--)
  {
      ans[i]=f[i][n+1]/f[i][i];
    for(int j=i-1;j>=1;j--)
      f[j][n+1]-=ans[i]*f[j][i];
  }
}
int main()
{
//  freopen("testdata.in","r",stdin);
//  freopen("testdata.out","w",stdout);
  int n,m,a,b,x,y;
  double p;
  read(n);read(m);read(a);read(b);
  p=a*1.0/b;
  for(int i=1;i<=m;i++)
  {
      read(x);read(y);
      mp[x][y]=mp[y][x]=1;
      ++d[x];++d[y];
  }
  for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
      if(mp[i][j])
          f[i][j]=(1-p)/d[j];
  for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
      f[i][j]=-f[i][j];
  for(int i=1;i<=n;i++)
    f[i][i]+=1;
  f[1][n+1]=1;
  gauss(n);
  for(int i=1;i<=n;i++)
    printf("%.9lf\n",ans[i]*p);
  return 0;
}

听说bzoj坑点很多

但是我在luogu上交的很顺利

原文地址:https://www.cnblogs.com/NicoDafaGood/p/8849539.html

时间: 2024-08-29 20:57:40

bzoj1778 驱赶猪猡/luogu2937 赶小猪的相关文章

高斯消元专题

[高斯消元专题] 最近学了高斯消元,理解起来非常滴简单,就是像我们平常解方程组一样的加减消元,代入消元什么的.但是为了使得这个算法变的比较好梳理,能按照一定的套路去打,那就简单多了. 那么,为了方便得出算法的写法与最终求解的写法,我们一般会将一个方程组一一对应转为矩阵(转为矩阵是什么意思?就是把每一个方程的每一项的系数取下来(包括最后的常数项),然后一一对应的放置在一个矩阵里面)后变成下述形式: 显然,如果某些方程组(矩阵)呈现出这样的形式的话,我们就非常容易能把它解出来. 但是如果初始的方程组

【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两个不同端点A_j和B_j (1 <= A_j<= N; 1 <= B_j <= N)表示的双向道路连接.保证城市1至少连接一个其它的城市.一开始臭气弹会被放在城市1.每个小时(包括第一个小时),它有P/Q (1 <= P <=1,000,000; 1 <= Q <

BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡

首先我们列出转移矩阵$M$,$M_{i, j} = \frac {1 - \frac{p} {q}} {deg[i]}$(i,j之间有边)or $M_{i, j} = 0$(i,j之间没边) 则这个矩阵$M_{i, j}$表示的是站在某个点$i$,下一次走到$j$且没有爆炸的概率 我们再看$M^n_{i, j}$,表示的站在某个点$i$,走$n$步以后到达$j$且没有爆炸的概率 故$M^n$的第一列代表了$1$号点到其他所有点的概率,设为列向量$A_n$,则$A_n = M^n * B$,其中$

BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡

1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 563  Solved: 216[Submit][Status][Discuss] Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两个不同端点A_j和B_j (1 <= A_j<

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

小猪的Android入门之路 Day 8 part 2

小猪的Android入门之路 Day 8 part 2 Android网络编程浅析--Android访问网络资源 --转载请注明出处:coder-pig 本节引言: 在part 1中我们学习了网络交互中用得较多的xml文件的相关概念,以及在Android中常用的 解析XML三种不同形式,分别SAX,DOM,Pull三种不同的解析方式;而在part 2中我们将会 讲解我们的应用如何去获取网络上的资源,分别是图片,HTML代码,XML代码和JSON数据; 好了,废话就这么多,开始本节的课程吧!从这p

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

厉害了!小猪用Git一年多后总结的精华

厉害了!小猪用Git一年多后总结的精华 描述性文字: 不要问我为什么用这种骚猪风格的标题,现在写博文,标题不骚,人家都不乐意看~ 接触Git到现在有一年多了,对Git使用也是日渐精进,虽说不上很熟络,但也算 入门,决定年前总结下,所以有了此文.Git博大精深,还有很多的东西需要学习, 比如自己搭建啊,一些便利工具的使用啊,一些疑难杂症解决方案啊等等,当然 这就是下一话的事了.本文讲述的是Git基础的一些东西,没有Git大法那个系列 那么通熟易懂,但是还是对关键性的知识点进行了浅析,相信看完本文你

小猪的数据结构辅助教程——2.7 线性表中的双向循环链表

小猪的数据结构辅助教程--2.7 线性表中的双向循环链表 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点: 1.了解引入双向循环链表的原因 2.熟悉双向循环链表的特点以及存储结构 3.掌握双向循环链表的一些基本操作的实现逻辑 4.掌握逆序输出双向循环链表元素逻辑 1.双向循环链表的引入 2.双向循环链表的存储结构 双向循环链表的特点: 上面也说了,空间换时间,比起循环链表只是多了一个指向前驱的指针 特点的话: 判断空表:L ->next = L -> prior = L; 存