高斯消元+矩阵的逆

来自popoqqq大神

求矩阵的逆:把I-T放在左边,P/Q*S放在右边,这样就形成了一个n*2n的矩阵,然后把左边高斯消元,右边就是求完逆的矩阵,其实就是ans,矩阵的逆跟乘法逆元是一样的,只不过是矩阵的逆元

然后输出a[i][n+1],事实上矩阵只有n*(n+1)

构造转移概率矩阵是a[u][v]=1.0/d[v]*(1-p/q),就是v->u的概率乘上在v不爆炸的概率,我们想一想,假设我们从1->n,1->2,有1/d[1]的概率转移,并且不能爆炸才能走过去,要乘上(1-p/q),然后2->3,要乘上1/d[2]的概率走过去,再乘上(1-p/q),不爆炸才能走过去,这就是转移的概率,每次矩阵自乘,就是b[i][j] += a[i][k]*a[k][j],求出又走一步的概率,最先开始S便是行向量,表示从1开始,还没走就爆炸的概率就是自己在这里爆炸,就是乘T^0,第一次转移就是乘上T,

#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-;
const int N = ;
int n, m;
double a[N][N];
double p, q, t;
vector<int> G[N];
void gauss_jordan()
{
a[][n + ] = t;
for(int i = ; i <= n; ++i)
{
a[i][i] += 1.0;
for(int j = ; j < G[i].size(); ++j)
{
int u = G[i][j];
a[i][u] -= (1.0 - t) / (double)(G[u].size());
}
}
for(int now = ; now <= n; ++now)
{
int x = now;
for(int i = now; i <= n; ++i) if(fabs(a[i][now]) > fabs(a[x][now])) x = i;
for(int i = ; i <= n + ; ++i) swap(a[now][i], a[x][i]);
double t = a[now][now];
for(int i = ; i <= n + ; ++i) a[now][i] /= t;
for(int i = ; i <= n; ++i) if(fabs(a[i][now]) > eps && now != i)
{
t = a[i][now];
for(int j = ; j <= n + ; ++j) a[i][j] -= t * a[now][j];
}
}
for(int i = ; i <= n; ++i) printf("%.9f\n", a[i][n + ]);
}
int main()
{
scanf("%d%d%lf%lf", &n, &m, &p, &q);
t = p / q;
for(int i = ; i <= m; ++i)
{
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
gauss_jordan();
return ;
}

bzoj1778的更多相关文章

  1. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元

    [BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...

  2. BZOJ1778 [Usaco2010 Hol]Dotp 驱逐猪猡

    首先我们列出转移矩阵$M$,$M_{i, j} = \frac {1 - \frac{p} {q}} {deg[i]}$(i,j之间有边)or $M_{i, j} = 0$(i,j之间没边) 则这个矩 ...

  3. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡

    题解: 网上有一种复杂的方法..好像复杂度并没有优势就没看 定义f[i]表示i的期望经过次数,f[i]=sigma{f[j]*p/q/du[j]}+(i==1); 然后高斯消元就可以了 最后求出来的f ...

  4. bzoj1778: [Usaco2010 Hol]Dotp 驱逐猪猡(概率DP+高斯消元)

    深夜肝题...有害身心健康QAQ 设f[i]为到达i的概率,d[i]为i的度数. 因为无限久之后炸弹爆炸的概率是1,所以最后在i点爆炸的概率实际上就是f[i]/sigma(f[]) 列出方程组 f[i ...

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

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

  6. 【刷题记录】BZOJ-USACO

    接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...

  7. OI刷题录——hahalidaxin

    16-3-25  —— bzoj 2049 [Sdoi2008]Cave 洞穴勘测:LCT入门 bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊:LCT Tsinsen A1303. t ...

随机推荐

  1. centOS7+mariadb+Nginx+PHP7.0 安装

    1.前期准备工作 更新 yum 源,自带的源没有 PHP5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7 ...

  2. BNUOJ 2947 Buy Tickets

    Buy Tickets Time Limit: 4000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID ...

  3. 在win10配置环境变量

    从win7升级成win10后找不到在哪配置环境变量...手动再见ヾ( ̄▽ ̄)Bye~,废话不多说,下面开始图文模式: 1)打开文件资源管理器,点左上角的"计算机"

  4. POJ 1741 Tree【Tree,点分治】

    给一棵边带权树,问两点之间的距离小于等于K的点对有多少个. 模板题:就是不断找树的重心,然后分开了,分治,至少分成两半,就是上限为log 然后一起统计就ok了 #include<iostream ...

  5. Java高概率面试题目—finally

    在Java面试中关于finally的面试题目出现的概率非常高,而且一旦面试官问起绝不会是蜻蜓点水,而是会向你发起层层递进地“连环问”,并且回答这系列问题常常需要代码的辅助,可谓考验基础的面试利题.究竟 ...

  6. UVA 1025_A Spy in the Metro

    [题意](小紫书)一个人从站台1出发,乘车要在时刻T到达站台n,为使在站台等车时间最短,她可以选择乘坐两个方向的列车,并在客车停靠站的时候换车. [分析]每次停站下车时,她都有三种选择,1.原地不动 ...

  7. Strongly connected-HDU4635

    Problem - 4635 http://acm.hdu.edu.cn/showproblem.php?pid=4635 题目大意: n个点,m条边,求最多再加几条边,然后这个图不是强连通 分析: ...

  8. 51Nod——T 1686 第K大区间

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...

  9. 洛谷 P4379 [USACO18OPEN]Lemonade Line

    P4379 [USACO18OPEN]Lemonade Line 题目描述 这是农场上一个炎热的夏日,Farmer John要给他的 NN 头奶牛发柠檬汽水了!所有的 NN 头奶牛(方便起见,编号为  ...

  10. MongoDB环境搭建教程收集(待实践)

    先收集,后续再实践. https://my.oschina.net/leezhen/blog/207262 http://www.360doc.com/content/11/0708/09/26606 ...