LINK:随机漫游

非常妙的一道题。

容易想到倒推期望。

设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数。

只要求出来这个就能O(1)回答询问。

\(f[i][j]=1+\sum_{v\in son_x,v\notin j}\frac{1}{d_i}f[i][j|v]+\sum_{v\in son_x,v\in j}\frac{1}{d_i}f[i][j]\)

有了这个东西 显然可以\((2^n\cdot n)^3\)暴力高斯消元了。

考虑优化 容易发现如果按照二进制的大小倒着推这个东西 那么前面那个部分完全已知了。

这样我们每次的方程最多n个 总复杂度\(2^n\cdot n^3\)

需要卡卡常数 如 消的时候d==0可以直接break了。

  1. const ll MAXN=19;
  2. ll f[MAXN][1<<MAXN];//f[i][j]表示到达i这个点此时集合为j还需要跑多少才能得到全集的期望边数.
  3. ll n,m,Q;
  4. ll a[MAXN][MAXN],d[MAXN];
  5. ll b[MAXN][MAXN],g[MAXN];
  6. inline ll ksm(ll b,ll p){ll cnt=1;while(p){if(p&1)cnt=(ll)cnt*b%mod;b=(ll)b*b%mod;p=p>>1;}return cnt;}
  7. inline void GAUSS()
  8. {
  9. rep(1,n,i)
  10. {
  11. ll p=i;
  12. rep(i,n,j)if(b[j][i]){p=j;break;}
  13. if(p!=i){rep(1,n,j)swap(b[i][j],b[p][j]);swap(g[i],g[p]);}
  14. ll ww=ksm(b[i][i],mod-2);
  15. rep(1,n,j)
  16. {
  17. if(i==j)continue;
  18. ll d=ww*b[j][i]%mod;
  19. if(!d)continue;
  20. rep(1,n,k)b[j][k]=(b[j][k]-b[i][k]*d)%mod;
  21. g[j]=(g[j]-g[i]*d)%mod;
  22. }
  23. }
  24. rep(1,n,i)g[i]=g[i]*ksm(b[i][i],mod-2)%mod;
  25. }
  26. signed main()
  27. {
  28. freopen("1.in","r",stdin);
  29. get(n);get(m);
  30. rep(1,m,i)
  31. {
  32. ll get(x),get(y);
  33. a[x][y]=a[y][x]=1;
  34. ++d[x];++d[y];
  35. }
  36. rep(1,n,i)d[i]=ksm(d[i],mod-2);
  37. ll maxx=(1<<n)-1;
  38. fep(maxx-1,1,j)
  39. {
  40. //求出每个f[i][j].
  41. rep(1,n,i)
  42. {
  43. b[i][i]=1;g[i]=0;
  44. if(j&(1<<(i-1)))
  45. {
  46. ++g[i];
  47. rep(1,n,k)
  48. {
  49. if(a[i][k])
  50. {
  51. if(!(j&(1<<(k-1))))g[i]=(g[i]+d[i]*f[k][j|(1<<(k-1))])%mod;
  52. else b[i][k]=(b[i][k]-d[i])%mod;
  53. }
  54. }
  55. }
  56. }
  57. GAUSS();
  58. rep(1,n,i)f[i][j]=(g[i]+mod)%mod;
  59. }
  60. get(Q);
  61. rep(1,Q,i)
  62. {
  63. ll st,s=0,get(x);
  64. rep(1,x,i)
  65. {
  66. ll get(y);
  67. s=s|(1<<(y-1));
  68. }
  69. get(st);
  70. putl(f[st][(maxx^s)|(1<<(st-1))]);
  71. }
  72. return 0;
  73. }

luogu P4321 随机漫游 期望dp 二进制 高斯消元的更多相关文章

  1. HDU 4418 Time travel 期望dp+dfs+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4418 Time travel Time Limit: 2000/1000 MS (Java/Othe ...

  2. BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/pro ...

  3. Luogu P4321 随机漫游

    期望DP要倒着推 Luogu P4321 题意 LOJ #2542 不一定是树,询问点不一定均为1 $Solution$ 设计一个巧妙的DP状态 设$ F(S,x)$表示当前在点$ x$已经走遍了$ ...

  4. BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】

    题目 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的 ...

  5. 【JLOI 2012】时间流逝(期望,树上高斯消元)

    题目链接 这是一道传统的期望题,可是有一些套路值得我去掌握. 我们用$s$来表示一种状态,就是当前拥有的能量圈,是一个正整数拆分的形式. 用$f_{s}$表示如果遇到果冻鱼后丢掉了最小的能量圈后的状态 ...

  6. 【BZOJ 2337】 2337: [HNOI2011]XOR和路径(概率DP、高斯消元)

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1170  Solved: 683 Description ...

  7. hdu4418(概率dp + 高斯消元)

    应该是一个入门级别的题目. 但是有几个坑点. 1. 只选择x能到达的点作为guass中的未知数. 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为- ...

  8. 【Luogu】P4035球形空间产生器(高斯消元)

    题目链接 水比题,把圆方程展开减一下把平方都减掉半径的平方也减掉,高斯消元即可. 然后我只输出两位小数,爆了两次零.我好菜啊. #include<cstdio> #include<c ...

  9. 【Luogu】P2447外星千足虫(高斯消元)

    题目链接 高斯消元解%2意义下的方程,Bitset优化一下. 在消的过程中就能顺便把有解的第一问求出来,记录一下访问过的最大行. #include<cstdio> #include< ...

随机推荐

  1. css div如何隐藏?

    在我们平时布局网站的时候,想要把div进行隐藏,但是很多人不知道css控制div显示隐藏?下面我们来讲解一下css如何让div隐藏. 1.使用display:none来隐藏div 我们可以使用disp ...

  2. 利用Cython对python代码进行加密

    利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...

  3. 注册表写入自定义协议,网页打开exe

    新建文件:Register.reg,写入代码: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\exe1] @="exe1 P ...

  4. MySQL 树形索引结构 B树 B+树

    MySQL 树形索引结构 B树 B+树   如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据.因此我们需要将数据放在硬盘上. 在硬盘上进行查询时也就产生了 ...

  5. 「疫期集训day13」雾天

    我们千里迢迢赶来这里支援协约国----与德军正面交锋的美国士兵 今天考试签到题都没A,失误重大,T1几周前做过的拓扑排序板子都没写,T2失误在没敢调试,对自己信心不足,30分钟写了个DP,几分钟没调出 ...

  6. Xshell6 优化

    Xshell6 优化

  7. unity position 记录

    localPosition为自身矩形中心点(Pivot)与其父节点矩形中心点(Pivot)的相对位置坐标,与自身锚点(Anchors)无关.anchoredPosition为矩形中心点(Pivot)与 ...

  8. nuxt的使用中碰到的问题

    使用npm run generate生成静态页面部署 如果不是部署在域名的根目录下,则需要在nuxt.config.js中添加 // nuxt.config.js export default { r ...

  9. java 面向对象(三十四):泛型三 自定义泛型类、泛型接口、泛型方法

    1.举例: [Order.java] public class Order<T> { String orderName; int orderId; //类的内部结构就可以使用类的泛型 T ...

  10. 数据可视化之分析篇(七)Power BI数据分析应用:水平分析法

    https://zhuanlan.zhihu.com/p/103264851 首先,以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 接下来我会围绕这五种不同的方法论, ...