[CSP-S模拟测试]:走路(期望DP+分治消元)
题目传送门(内部题100)
输入格式
第一行两个整数$n,m$,接下来$m$行每行两个整数$u,v$表示一条$u$连向$v$的边。不保证没有重边和自环。
输出格式
$n-1$行每行一个整数,第$i$行表示$k=i+1$时的答案。对$998244353$取模。
样例
样例输入:
3 6
1 1
1 2
2 1
2 2
1 3
3 1
样例输出:
4
5
数据范围与提示
数据范围:
对于$25\%$的数据,$n\leqslant 50$。
对于另外$20\%$的数据,前$m-1$条边满足$u<v$。
对于另外$15\%$的数据,不存在$u,v$使得$u!=v$且$\min(u,v)>1$。
对于$100\%$的数据,$1\leqslant n\leqslant 300,1\leqslant m\leqslant 10^5,1\leqslant u,v\leqslant n$。
提示:
对于质数$p$和有理数$\frac{a}{b}(b\mod p>0)$,存在恰好一个整数$c$满足$0\leqslant c<p$且$a\equiv bc(\mod p)$,我们称$c$为$\frac{a}{b}$对$p$取模的结果。
题解
概率正着推,期望倒着推。
不妨设$f[i]$表示从$i$出发走到$k$的期望步数,那么可以列出式子:
$$f[i]=\sum \frac{f[j]}{du[i]}+1$$
$f[k]=0$
其中$j$是$i$的所有出边所能到达的点,$du[i]$则为$i$的出度。
那么枚举所有的$k$,然后暴力高斯消元即可拿到$25$分。
考虑优化,因为高斯消元中一段的值可以对很多$k$做贡献,所以我们可以用分治消元。
原理就是:对于区间$[l,r]$,先消$[mid+1,r]$,然后继续递归$[l,mid]$,递归之后再消$[l,mid]$,接着递归$[mid+1,r]$。
时间复杂度:$\Theta(n^3\log n)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int n,m;
int du[301],top;
long long Map[301][302],ans[301];
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;y>>=1;
}
return res;
}
void gauss(int x,int l,int r)
{
long long inv=qpow(Map[x][x],mod-2);
for(int i=1;i<=n+1;i++)Map[x][i]=Map[x][i]*inv%mod;
for(int i=1;i<=n;i++)
{
if(i==x)continue;
long long flag=Map[i][x];
for(int j=l;j<=r;j++)
Map[i][j]=(Map[i][j]-Map[x][j]*flag)%mod;
Map[i][n+1]=(Map[i][n+1]-Map[x][n+1]*flag)%mod;
}
}
void solve(int l,int r)
{
if(l==r){ans[l]=(Map[1][n+1]+mod)%mod;return;}
int mid=(l+r)>>1;int wzc[301][302];
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
wzc[i][j]=Map[i][j];
for(int i=mid+1;i<=r;i++)gauss(i,l,r);
solve(l,mid);
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
Map[i][j]=wzc[i][j];
for(int i=l;i<=mid;i++)gauss(i,l,r);
solve(mid+1,r);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
Map[u][v]++;du[u]++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
Map[i][j]=Map[i][j]*qpow(du[i],mod-2)%mod;
Map[i][i]+=(Map[i][n+1]=-1);
}
solve(1,n);
for(int i=2;i<=n;i++)printf("%d\n",ans[i]);
}
rp++
[CSP-S模拟测试]:走路(期望DP+分治消元)的更多相关文章
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- HDU 2262 Where is the canteen 期望dp+高斯消元
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...
- hdu4418 Time travel 【期望dp + 高斯消元】
题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...
- 【noi2019集训题1】 脑部进食 期望dp+高斯消元
题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...
- LightOJ 1151 Snakes and Ladders 期望dp+高斯消元
题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定 而且 ...
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...
- ZJUT 1423 地下迷宫(期望DP&高斯消元)
地下迷宫 Time Limit:1000MS Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...
- Codeforces.24D.Broken robot(期望DP 高斯消元)
题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...
- HDU4418 Time travel(期望dp 高斯消元)
题意 题目链接 Sol mdzz这题真的太恶心了.. 首先不难看出这就是个高斯消元解方程的板子题 \(f[x] = \sum_{i = 1}^n f[to(x + i)] * p[i] + ave\) ...
随机推荐
- springMVC基础框架搭建
1.导入springMVC相关jar包: 2.添加Web.xml配置文件中关于SpringMVC的配置 <servlet> <servlet-name>springmvc< ...
- vue进阶:基于vue-cli创建项目(搭建手脚架)
vue-cli安装.创建项目 基于vue-cli创建的项目进行开发 使用vue-cli图形化界面搭建项目 插件与工具 一.vue-cli简介.安装.创建项目 Vue-cli是基于Vue.js进行快速开 ...
- java.sql.SQLException: Could not retrieve transaction read-only status from server 问题解决
网上有2种主要说法 第一种 问题描述: java代码在开始事务后,先做了一个查询,再insert,此时会报: java.sql.SQLException: could not ret ...
- Linux系统介绍及部署
Linux系统介绍及部署1.常见操作系统 windows.Linux(类unix系统).Android.iOS.unix(HP UNIX)2.操作系统构成 外壳(shell)+驱动+内核3.常见Lin ...
- css中animation和@keyframes 动画
Animation 使用简写属性,将动画与 div 元素绑定: div { animation:mymove 5s infinite; -webkit-animation:mymove 5s infi ...
- mac 下开发golang 配置
1.安装golang 见附件 2.默认安装在 /usr/local/go 目录下 3.配置环境变量: 编辑文件:vim /etc/profile,有的MAC 下没有这个文件,可以新建. 加入环境变量 ...
- linux安装RabbitMQ yum
一.RabbitMQ概念RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发 ...
- ueditor 去掉自动跟随内容的<p><br /></p>
//编辑器不能为空内容 if (domUtils.isEmptyNode(me.body)) { me.body.innerHTML = ''; ueditor.all.js 删除BR 如果还不行, ...
- Scala获取main函数参数,idea演示
1 代码示范 /** * @author zhangjin * @create 2019-06-09 11:15 */ object TestMarnArgs { def main(args: Arr ...
- ARM cortex-version
cortex-M\A\R M microcontroller 微控制器 就是单片机 A application 应用及处理器 就是手机平板电脑等 R realtime 实时处理器 响应 ...