link

题意:

小 T 迷失在了一个有 n 个点的群岛上。
初始时他在 1 号岛,他要通过架在岛间的 m 座双向桥,在正好过 k 座桥时达到 n 号岛的大门。
这些桥中有若干座附魔桥。当小 T 经过一座附魔桥时,如果他身上没有附魔标记则被标记,如果他身上已有附魔标记则标记消失。

大门只会在他身上有附魔标记时才会开启,只有这样他才能逃离。

小 T 迷失在了群岛之间,他每次会等概率随机挑选一座与他所在岛屿相连的桥走。小 T 向你询问他能逃离的概率。

保证图无自环无重边。

分析:

用 \(A [ s ] [ i ] [ j ] [ w ]\)表示从\(i\)岛恰好经过 \(2^s\)条边到达 \(j\)岛且状态为 \(w\)时的概率。
题目中 \(k≤10^6\),所以 \(s\)最大不超过20,从低到高枚举 \(s\),并利用Floyd更新 \(A\)即可。最后从\(A\)中凑出 \(k\)条边的值即可。
用背包二进制优化即可将步数优化掉\(k=1e^6\)然后每次维护是否是附魔状态。
或者直接利用快速幂来更新 \(A\)的同时,求出答案。

ll qpow(ll a, ll b)
{ll ans = 1;while(b){if(b & 1) ans = ans * a % mod;b >>= 1;a = a * a % mod;}return ans;
}int n;
ll A[22][110][110][2];
ll g[110][110][2];
ll tmp[110][110][2];
int e[110][110];
void update(int f, int s) ///背包二进制优化
{for(int k = 1; k <= n; k++){for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){A[s][i][j][0] += A[f][i][k][0] * A[f][k][j][0] % mod; ///2^f步都没有附魔A[s][i][j][0] += A[f][i][k][1] * A[f][k][j][1] % mod; ///都附魔了A[s][i][j][1] += A[f][i][k][0] * A[f][k][j][1] % mod;A[s][i][j][1] += A[f][i][k][1] * A[f][k][j][0] % mod;A[s][i][j][0] %= mod; //都要取模A[s][i][j][1] %= mod;}}}
}
void add(int f)
{memset(tmp, 0, sizeof tmp);for(int k = 1; k <= n; k++){for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){tmp[i][j][0] += g[i][k][0] * A[f][k][j][0] % mod;tmp[i][j][0] += g[i][k][1] * A[f][k][j][1] % mod;tmp[i][j][1] += g[i][k][1] * A[f][k][j][0] % mod;tmp[i][j][1] += g[i][k][0] * A[f][k][j][1] % mod;tmp[i][j][0] %= mod;tmp[i][j][1] %= mod;}}}for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){for(int k = 0; k <= 1; k++){g[i][j][k] = tmp[i][j][k];}}}
}void solve()
{int m, k;scanf("%d%d%d", &n, &m, &k);memset(e, -1, sizeof e);memset(A, 0, sizeof A);memset(g, 0, sizeof g);for(int i = 1; i <= m; i++){int x, y, z;scanf("%d%d%d", &x, &y, &z);e[x][y] = z; ///建桥e[y][x] = z; //是否是附魔桥}for(int i = 1; i <= n; i++){int sum = 0;for(int j = 1; j <= n; j++){sum += (e[i][j] >= 0); ///是否存在这座桥}for(int j = 1; j <= n; j++){if(e[i][j] < 0) continue; ///不存在这座桥A[0][i][j][e[i][j]] = qpow(sum, mod - 2);}}for(int i = 1; i <= n; i++) ///一步 初始化答案{for(int j = 1; j <= n; j++){g[i][j][0] = A[0][i][j][0];g[i][j][1] = A[0][i][j][1];}}for(int i = 1; (1 << i) <= k; i++)update(i - 1, i);k--;for(int i = 20; i >= 0; i--){if(k >= (1 << i)){add(i);k -= (1 << i);}}printf("%lld\n", g[1][n][1]);
}

2021百度之星初赛 A迷失(DP+flody+二进制优化)相关推荐

  1. 2021百度之星初赛第一场部分题解

    写在前面 几个家长要求我写一些2021百度之星初赛第一场的题解. 1003 鸽子 原题链接 https://acm.hdu.edu.cn/showproblem.php?pid=6998 http:/ ...

  2. 2021百度之星初赛二(1001 -- 1003)

    2021百度之星初赛二(1001 – 1003) 1001 题意: 给 a,b,每次 a,b会变为 a+b,a-b,问 k 次之后变成了哪两个数,对 998244353998244353 取模,多组数 ...

  3. 2021百度之星初赛一7.31

    1008穿越隧道 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 60; ...

  4. 2016百度之星 - 初赛(Astar Round2B)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 被自己蠢哭,去年还能进一下复赛,今年复赛都没戏了... 链接→2016"百度之星" - 初赛(Astar Round2B)  Prob ...

  5. 2016百度之星 - 初赛(Astar Round2A)解题报告

    此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" ...

  6. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 1 /* 2 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 3 比赛时以为是贪心,榨干智商也 ...

  7. 2015百度之星初赛(1)1006 旋转卡壳

    矩形面积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. 2011百度之星初赛B圆环

    这是百度之星2011初赛B中的第一道题,题目也很水,只要找到解题思路就OK了.. 题目: 时间限制:1000ms 描述 一个圆环上有n个位置,这n个位置按顺时针依次标号为1, 2, -, n.初始时圆 ...

  9. 百度之星初赛(1)解题报告

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. python数据预测模型算法_如何对时间序列预测问题计算基准预测(python)
  2. 完美,竟然用一个脚本就把系统升级到https了,且永久免费!
  3. vs2015 QT5.6 兼容xp系统
  4. ElasticSearch创建文档
  5. cesium obj转b3dm转换及加载
  6. mac安装和卸载mysql_基于centos7系统卸载rpm安装的mysql
  7. CSS——可视化格式模型
  8. rocketmq教程教程,JDK8 Stream 数据流效率分析
  9. c++图的创建_利用Microsoft Visio 软件绘制工艺流程图
  10. java匹配字符串所在位置_Java:获取字符串中匹配项位置的方法?
  11. python学习笔记——叁之修改配置文件
  12. 【新番尝鲜】玛利亚狂热--百合VS伪娘之战
  13. 阵列天线方向图乘积定理的Python实现
  14. 如何用PS缩小图片而清晰度不变?
  15. 修改网络设备在路由器中显示名称
  16. 两个60后大叔的新能源战争:王传福与曾毓群的万亿赌局
  17. [网络性能测试学习笔记] 测试AX3 Pro WiFi6无线路由器的系统转发能力(硬件转发交换能力L23吞吐量,L47应用层能力-最大可支持设备用户数,并发连接数等)
  18. Maximo安全控制相关表
  19. 香草冰淇淋和代码调试
  20. 【架构师技能篇】Worker初识

热门文章

  1. 手机长曝光怎么设置_iphonex长曝光怎么设置
  2. 【R语言科研绘图】——韦恩图
  3. AAAI 2021 北京预讲会有哪些值得关注的任务和技术?
  4. 答题活动小程序v1.0
  5. 计算机图形学|南邮——画由键盘鼠、标控制的正方体
  6. Win10子系统图形界面崩溃解决办法
  7. 分布式医疗挂号系统(七) | 开发医院设置页面
  8. 苹果6s怎么导出照片_苹果备忘录怎么导出来?免费安利你一个实用教程
  9. Linux中批量杀进程的方法
  10. html中的tr,td,th标签