【CF446D】DZY Loves Games

题意:一张n个点m条边的无向图,其中某些点是黑点,1号点一定不是黑点,n号点一定是黑点。问从1开始走,每次随机选择一个相邻的点走过去,经过恰好k个黑点到达n的概率。

$n\le 500,m\le 500000,k\le 10^9$,黑点个数不超过100.

题解:一眼就知道是高斯消元和矩乘什么的。我们先预处理出f[i][j]表示从第i个黑点开始走到的下一个黑点是j的概率。这个用高斯消元容易搞定。然后上矩乘即可。但是问题在于如果这样做的话我们要做n遍高斯消元。不过我们发现每次消元时左边的系数矩阵都是不变的,所以我们可以将n个方程组放到一起消元,复杂度就变成$O(n^3+10^6\log k)$了。

#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
typedef double db;
int n,m,K,tot;
db f[510][610];
int dan[510],d[510],p[510],pa[100010],pb[100010];
struct M
{
db v[105][105];
M () {memset(v,0,sizeof(v));}
db * operator [] (const int &a) {return v[a];}
inline M operator * (const M &a) const
{
M b;
int i,j,k;
for(i=1;i<=tot;i++) for(j=1;j<=tot;j++) for(k=1;k<=tot;k++) b.v[i][j]+=v[i][k]*a.v[k][j];
return b;
}
}S,T;
inline void pm(int y)
{
while(y)
{
if(y&1) S=S*T;
T=T*T,y>>=1;
}
}
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd(),K=rd();
int i,j,k,a,b;
for(i=1;i<=n;i++)
{
dan[i]=rd();
if(dan[i]) dan[i]=++tot,p[tot]=i;
}
for(i=1;i<=m;i++) pa[i]=rd(),pb[i]=rd(),d[pa[i]]++,d[pb[i]]++;
for(i=1;i<=m;i++)
{
a=pa[i],b=pb[i];
if(!dan[a]) f[b][a]-=1.0/d[a];
else f[b][dan[a]+n]+=1.0/d[a];
if(!dan[b]) f[a][b]-=1.0/d[b];
else f[a][dan[b]+n]+=1.0/d[b];
}
f[1][n+tot+1]=1;
for(i=1;i<=n;i++) f[i][i]+=1;
for(i=1;i<=n;i++)
{
for(j=k=i;j<=n;j++) if(fabs(f[j][i])>fabs(f[k][i])) k=j;
if(i!=k) for(j=i;j<=n+tot+1;j++) swap(f[i][j],f[k][j]);
db tmp=f[i][i];
for(j=i;j<=n+tot+1;j++) f[i][j]/=tmp;
for(j=1;j<=n;j++) if(j!=i)
{
tmp=f[j][i];
for(k=1;k<=n+tot+1;k++) f[j][k]-=f[i][k]*tmp;
}
}
for(i=1;i<=tot;i++) for(j=1;j<=tot;j++) T[i][j]=f[p[j]][i+n];
for(i=1;i<=tot;i++) S[1][i]=f[p[i]][n+tot+1];
pm(K-2);
printf("%.10lf",S[1][tot]);
return 0;
}

【CF446D】DZY Loves Games 高斯消元+矩阵乘法的更多相关文章

  1. CF446D DZY Loves Games

    CF446D DZY Loves Games 高斯消元好题 如果暴力地,令f[i][k]表示到i,有k条命的概率,就没法做了. 转化题意 生命取决于经过陷阱的个数 把这个看成一步 所以考虑从一个陷阱到 ...

  2. BZOJ_1778_[Usaco2010_Hol]_Dotp_驱逐猪猡_(期望动态规划+高斯消元+矩阵)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1778 炸弹从1出发,有\(\frac{P}{Q}\)的概率爆炸,如果不爆炸,等概率移动到连通的 ...

  3. 【Luogu】P3317重建(高斯消元+矩阵树定理)

    题目链接 因为这个专门跑去学了矩阵树定理和高斯消元qwq 不过不是很懂.所以这里只放题解 玫葵之蝶的题解 某未知dalao的矩阵树定理 代码 #include<cstdio> #inclu ...

  4. POJ1487 Single-Player Games 高斯消元

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1487 题解概括 给出多个树形结构,由小写字母和数字表示,每个小写字母表示一棵小树.现在,以a为根节点 ...

  5. 6.10 省选模拟赛 小C的利是 高斯消元 矩阵行列式

    LINK:小C的利是 想起来把这道题的题解写了 .一个常识:利是在广东那边叫做红包. 关于行列式的题目 不过我不太会23333..口胡还是可以的. 容易想到10分的状压.不过没什么意思. 仔细观察要求 ...

  6. BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3270 \(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[ ...

  7. Codeforces 446D - DZY Loves Games(高斯消元+期望 DP+矩阵快速幂)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,%%% 首先考虑所有格子都是陷阱格的情况,那显然就是一个矩阵快速幂,具体来说,设 \(f_{i,j}\) 表示走了 \(i\) 步 ...

  8. [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)

    In some countries building highways takes a lot of time... Maybe that's because there are many possi ...

  9. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

随机推荐

  1. Myeclispe 代码自动补全

    1.Myeclispe—>Preference 2.Java->Editor->Content Assist 3.Auto activation for java 补全(.abcde ...

  2. 本地文件上传GitHub

    (1)mkdir 项目名称(2)cd  项目名称(3)git init 把它变成可管理的Git仓库(4)git status 查看状态(5)git add . 点用空格隔开(6)git status ...

  3. jQuery 学习(1)——认识jQuery

    1.下载 下载地址:http://jquery.com/download/ jquery-3.2.1.js——用于开发和学习(229K) jquery-3.2.1.min.js——用于项目和产品(31 ...

  4. Java的内存管理机制之内存区域划分

    各位,好久不见.先做个预告,由于最近主要在做Java服务端开发,最近一段时间会更新Java服务端开发相关的一些知识,包括但不限于一些读书笔记.框架的学习笔记.和最近一段时间的思考和沉淀.先从Java虚 ...

  5. Chart:Grafana

    ylbtech-Chart:Grafana 1.返回顶部 1-1. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 0. https://grafana.com/ 1. http: ...

  6. 性能优化 Profiler MAT 内存泄漏 堆转储 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. shouldComponentUpdate 是做什么的,(react 性能优化是哪个周期函数?)

    shouldComponentUpdate询问组件是否需要更新的一个钩子函数,判断数据是否需要重新渲染,返回一个布尔值.默认的返回值是true,需要重新render().若如果返回值是false则不触 ...

  8. 【开源】C#信息抽取系统【招募C#队友】

    FDDC2018金融算法挑战赛02-A股上市公司公告信息抽取 更新时间 2018年7月11日 By 带着兔子去旅行 信息抽取是NLP里的一个实用内容.该工具的目标是打造一个泛用的自动信息抽取工具.使得 ...

  9. 听闻 kubernetes,快速了解一番

    看到 各位 大厂都在用这个,  而本人最多是用yarn 做些ML的事情,   赶快了解一下, 先扫盲记录一下. 一.名称趣闻 kubernetes缩写为k8s, 阿哈 ,原来是:k8s,意思就是k后面 ...

  10. masonry 基本用法

    一:masonry 基本用法 fistView=[[UIView alloc] init]; fistView.backgroundColor=[UIColor redColor]; [self.vi ...