【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)$了。

  1. #include <cstring>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. typedef double db;
  8. int n,m,K,tot;
  9. db f[510][610];
  10. int dan[510],d[510],p[510],pa[100010],pb[100010];
  11. struct M
  12. {
  13. db v[105][105];
  14. M () {memset(v,0,sizeof(v));}
  15. db * operator [] (const int &a) {return v[a];}
  16. inline M operator * (const M &a) const
  17. {
  18. M b;
  19. int i,j,k;
  20. 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];
  21. return b;
  22. }
  23. }S,T;
  24. inline void pm(int y)
  25. {
  26. while(y)
  27. {
  28. if(y&1) S=S*T;
  29. T=T*T,y>>=1;
  30. }
  31. }
  32. inline int rd()
  33. {
  34. int ret=0,f=1; char gc=getchar();
  35. while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
  36. while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
  37. return ret*f;
  38. }
  39. int main()
  40. {
  41. n=rd(),m=rd(),K=rd();
  42. int i,j,k,a,b;
  43. for(i=1;i<=n;i++)
  44. {
  45. dan[i]=rd();
  46. if(dan[i]) dan[i]=++tot,p[tot]=i;
  47. }
  48. for(i=1;i<=m;i++) pa[i]=rd(),pb[i]=rd(),d[pa[i]]++,d[pb[i]]++;
  49. for(i=1;i<=m;i++)
  50. {
  51. a=pa[i],b=pb[i];
  52. if(!dan[a]) f[b][a]-=1.0/d[a];
  53. else f[b][dan[a]+n]+=1.0/d[a];
  54. if(!dan[b]) f[a][b]-=1.0/d[b];
  55. else f[a][dan[b]+n]+=1.0/d[b];
  56. }
  57. f[1][n+tot+1]=1;
  58. for(i=1;i<=n;i++) f[i][i]+=1;
  59. for(i=1;i<=n;i++)
  60. {
  61. for(j=k=i;j<=n;j++) if(fabs(f[j][i])>fabs(f[k][i])) k=j;
  62. if(i!=k) for(j=i;j<=n+tot+1;j++) swap(f[i][j],f[k][j]);
  63. db tmp=f[i][i];
  64. for(j=i;j<=n+tot+1;j++) f[i][j]/=tmp;
  65. for(j=1;j<=n;j++) if(j!=i)
  66. {
  67. tmp=f[j][i];
  68. for(k=1;k<=n+tot+1;k++) f[j][k]-=f[i][k]*tmp;
  69. }
  70. }
  71. for(i=1;i<=tot;i++) for(j=1;j<=tot;j++) T[i][j]=f[p[j]][i+n];
  72. for(i=1;i<=tot;i++) S[1][i]=f[p[i]][n+tot+1];
  73. pm(K-2);
  74. printf("%.10lf",S[1][tot]);
  75. return 0;
  76. }

【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. 导出使用NPOI

    调用: DataTable table = new DataTable(); #region 创建 datatable table.Columns.Add(new DataColumn("账 ...

  2. app保存图片到用户相册时闪退解决办法

    在iOS11中,app保存图片到用户相册时必须添加权限使用描述即NSPhotoLibraryAddUsageDescription,否则会闪退. 只需在info.plist—Property List ...

  3. thymeleaf学习笔记

    1.${@dict.hello().fatherName} 显示对象的属性2.${@dict.hello()[0].fatherName} 显示列表对象的属性3.<div th:object=& ...

  4. MySQL性能调优的10个方法 - mysql数据库栏目

    摘要: https://edu.aliyun.com/a/29036?spm=5176.11182482.related_article.1.hbeZbF 摘要: MYSQL 应该是最流行了 WEB ...

  5. iOS/MAC 数据压缩与解压缩及常用算法 LZMA、ZLIB

    苹果提供的常用的数据压缩算法LZMA.ZLIB.LZ4等: 这三种算法也是苹果建议的,可跨平台使用: 定义如下: /* Commonly-available encoders */ COMPRESSI ...

  6. 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=i5j7gwrxj9x5

    我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=i5j7gwrxj9x5

  7. ROM后缀含义

    ROM files, unless altered by the uploader, always have special suffixes to quickly denote what the s ...

  8. Effective Java 第三版——72. 赞成使用标准异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  9. curl模拟访问已经存在的cookie

    curl 'http://i.meituan.com/brunch/order?status=2' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, d ...

  10. .net Core Abp See config settings - "CustomSchemaIds" for a workaround

    Swagger  See config settings - "CustomSchemaIds" for a workaround System.InvalidOperationE ...