CF446D 题解
题意
给定一张 \(n\) 个点 \(m\) 条边的无向图,每个节点有权值 \(v_i=\) \(0/1\)。角色从节点 \(1\) 开始随机游走,走到 \(n\) 停止。求其经过路径上权值和等于 \(k-1\) 的概率。经过多次算多次。保证 \(v_1=0,v_n=1\)。
\(1 \le n \le 500,1 \le m \le 10^5,2 \le k \le 10^9,1\le \sum v_i \le 101\)。
题解
首先考虑所有 \(v_i\) 都为 \(1\) 的情况。那么就是走 \(k-1\) 步。这个用矩阵快速幂 \(n^3 \log k\) 可以解决。
但此题不一定 \(v_i\) 都为 \(1\),且 \(n^3 \log k\) 会超时。发现 \(v_i=1\) 的节点个数 \(t\) 较小,开始思考 \(t^3 \log k\) 的算法。
我们称 \(v_i=1\) 的点为特殊点。参考上面的思路,我们只需求得从一个特殊点到另一个特殊点且途中不经过其他特殊点的概率即可。
不难想到转移方程:设 \(f_{i,j}\) 为从点 \(i\) 到特殊点 \(j\),且不经过其他特殊点的概率。\(g_{i,j}\) 为从特殊点 \(i\) 到特殊点 \(j\) 的概率。
那么当 \(i\) 为非特殊点时,有 \(\displaystyle f_{i,j}=\frac{\sum_{(u,i)\in E} f_{u,j}}{d_i}\)。当 \(i\) 为特殊点时,有 \(f_{i,i}=1\),\(\forall j \neq i,f_{i,j}=0\)。然后 \(\displaystyle g_{i,j}=\frac{\sum_{(u,i)\in E}f_{u,j}}{d_i}\)。
那么求出 \(f\) 即可。但我们发现 \(f\) 有 \(nt\) 个未知数,高斯消元是 \(n^3t^3\) 的,无法通过。怎么办呢?
发现 \(f\) 对于 \(j\) 是独立的。那么可以降到 \(n^3t\)。但还是无法通过。
复杂度到这里好像陷入了瓶颈。但把方程写出来,仔细观察可以发现对不同 \(j\),方程前面的系数部分是一样的,仅常数项有区别。那么我们想一想高斯消元的过程,可以将系数部分合并。那么矩阵变成了 \(n \times (n+t)\),复杂度是 \(n(n+t)^2\) 的,可以通过。
于是此题解决。
CF446D 题解的更多相关文章
- 【CF446D】DZY Loves Games 高斯消元+矩阵乘法
[CF446D]DZY Loves Games 题意:一张n个点m条边的无向图,其中某些点是黑点,1号点一定不是黑点,n号点一定是黑点.问从1开始走,每次随机选择一个相邻的点走过去,经过恰好k个黑点到 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 一步一步地完成题目——费解的开关(C/C++语言)递推、递归、顺序思维
前言 本文中博主将一步一步地.以正常人的顺序思维完成题目--费解的开关,使用的核心方法是递推与递归. 题目 参考题目:费解的开关 详细的题目信息相信大家都已经知道了,因此这里为了简洁只展示输入输出格式 ...
- mysql应用程序无法正常启动0xc000007b错误解决方法
一般大家从mysql官网下载mysql安装包是一个zip压缩文件,照着网上步骤,操作mysqld --initialize,却发现系统报错, 其实是因为缺少一些C++组件以及python组件引起的,如 ...
- finalshell如何查看密码
1.右键点击导出 2.打开导出的配置文件,搜索password,找到password的编码后的字符串复制 3.运行下面代码,即可查看原来的密码,把main()方法的字符串替换成上一步复制的字符串imp ...
- docker中安装db2
1.查看可安装的db2版本 docker search db2express-c2.下载db2镜像 docker pull ibmoms/db2express-c 3.安装镜像docker run ...
- Java密码加密的两种保存方式
密码加密的两种方式(md5和base64) 常见的加密方式有盐值,md5和jdk自带的base64,这里我记录的是base64如何使用,以及破解的方式,话不多说,直接贴代码! 其实md5和加盐值都差不 ...
- 085_JS Promise
js对undefined的处理 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000 ...
- crontal 计划任务
crontab每分钟定时执行: */1 * * * * service mysqld restart //每隔1分钟执行一次 */10 * * * * service mysqld restart / ...
- 记录一次mybatis中parameterType中使用String和string的区别
今天修改一个问题. xml中使用的是#{xxxx jdbcType=String} 但是这个sql 查询需要用到 in 如果这样查询 会变成 in ( "1,2,3,4,5" ...
- vue动态切换图片
1.踩的一个坑是:直接获取对象,使用style改变其背景图地址或者对img标签改变src值 因为经过vue经过打包编译后,图片地址已经被处理了,这时更新地址是无效的,会找不到图片. 所以可以用多个标签 ...
- (原创)odoo动态设置树形视图中的字段,每个用户可定制自己要显示的字段
模块详情