【CF446D】DZY Loves Games
题解:
不错的题目
首先要求的黑点个数非常多
比较容易想到矩阵乘法
于是我们可以求出从某个黑点出发到任意一个黑点之间的概率
发现不同出发点带来的变化只有常数项
于是我们可以预处理出从每个方程转移的系数
处理的方法就是 当行a减去k倍的行b时
我们同时更新行b被多少行更新了
求完之后我们只需要求它的k-2次幂
当然我们还需要求出起点1到每个黑点的概率(一起求)
矩阵乘法的比较优的写法是这样的
- rep(i,,n)
- rep(j,,n)
- if (x.a[j][i])
- rep(k,,n)
- z.a[j][k]+=x.a[j][i]*y.a[i][k];
要再快可以使用分块乘法
高斯消元的时候由于f[i][i]=1,所以可以不去找最大值
因为那样的话我们处理哪些由哪些转移还要记录pos,比较麻烦
cf还卡栈。。快速幂要写成非递归形式的
代码:
- #include <bits/stdc++.h>
- #define rint register int
- #define IL inline
- #define rep(i,h,t) for (rint i=h;i<=t;i++)
- #define dep(i,t,h) for (rint i=t;i>=h;i--)
- using namespace std;
- const int N=6e5;
- const int N2=;
- int head[N2],v[N2],du[N2],l,n,m,k,M[N2][N2];
- double o2[N2];
- double f[N2][N2],jl[N2][N2];
- double ee=1.00000000000000000;
- struct re{
- int a,b;
- }a[N*];
- void arr(int x,int y)
- {
- a[++l].a=head[x];
- a[l].b=y;
- head[x]=l;
- }
- struct re1{
- double a[][];
- re1()
- {
- rep(i,,n)
- rep(j,,n) a[i][j]=;
- }
- }o;
- re1 z;
- re1 js(re1 x,re1 y)
- {
- memset(z.a,,sizeof(z.a));
- rep(i,,n)
- rep(j,,n)
- if (x.a[i][j])
- rep(k,,n)
- z.a[i][k]+=x.a[i][j]*y.a[j][k];
- return(z);
- }
- re1 y;
- re1 o3;
- re1 fsp(rint x)
- {
- memset(y.a,,sizeof(y.a));
- o3=o;
- rep(i,,n) y.a[i][i]=;
- while (x)
- {
- if (x&) y=js(y,o3);
- x>>=;
- o3=js(o3,o3);
- }
- return(y);
- }
- int ve[N2],cnt=;
- void Gauss()
- {
- rep(i,,n) jl[i][i]=;
- rep(i,,n)
- {
- rep(j,,n)
- if (i!=j)
- {
- double t=-f[j][i]/f[i][i];
- rep(k,,n) f[j][k]+=t*f[i][k];
- rep(k,,n) jl[j][k]+=t*jl[i][k];
- }
- }
- rep(i,,n)
- if (v[i])
- {
- cnt=;
- double tmp=ee/du[i];
- rep(j,,n)
- if (M[i][j]) ve[++cnt]=j;
- rep(k,,n)
- if (v[k])
- {
- double ans=;
- rep(j,,cnt) ans+=M[i][ve[j]]*jl[k][ve[j]]*tmp;
- o.a[i][k]=ans;
- }
- }
- rep(j,,n)
- if (v[j])
- o2[j]=jl[j][];
- }
- int main()
- {
- freopen("1.in","r",stdin);
- freopen("1.out","w",stdout);
- ios::sync_with_stdio(false);
- cin>>n>>m>>k;
- rep(i,,n)
- {
- cin>>v[i];
- }
- rep(i,,m)
- {
- int x,y;
- cin>>x>>y;
- arr(x,y); arr(y,x);
- M[x][y]++; M[y][x]++;
- du[x]++; du[y]++;
- }
- rep(i,,n)
- {
- f[i][i]=-;
- for (int u=head[i];u;u=a[u].a)
- {
- int vv=a[u].b;
- if (!v[vv]) f[i][vv]+=ee/du[vv];
- }
- }
- Gauss();
- double ans=;
- if (k!=)
- {
- re1 ans2=fsp(k-);
- rep(i,,n)
- if (v[i]) ans+=o2[i]*ans2.a[i][n];
- } else
- if (k==) ans=o2[n];
- else ans=;
- printf("%.9f",ans);
- return ;
- }
【CF446D】DZY Loves Games的更多相关文章
- 【CF446D】DZY Loves Games 高斯消元+矩阵乘法
[CF446D]DZY Loves Games 题意:一张n个点m条边的无向图,其中某些点是黑点,1号点一定不是黑点,n号点一定是黑点.问从1开始走,每次随机选择一个相邻的点走过去,经过恰好k个黑点到 ...
- 【BZOJ3561】DZY Loves Math VI (数论)
[BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...
- 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
[BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...
- 【BZOJ3512】DZY Loves Math IV(杜教筛)
[BZOJ3512]DZY Loves Math IV(杜教筛) 题面 BZOJ 求 \[\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\] 其中\(n\le 10^5,m\l ...
- 【BZOJ3309】DZY Loves Math 解题报告
[BZOJ3309]DZY Loves Math Description 对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数.例如\(f(1960)=f(2^3×5^1×7^ ...
- 【BZOJ3309】DZY Loves Math 莫比乌斯反演+线性筛(好题)
[BZOJ3309]DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10 ...
- 【题解】DZY Loves Chinese
[题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...
- 【BZOJ3569】DZY Loves Chinese II
[BZOJ3569]DZY Loves Chinese II 题面 bzoj 题目大意: 给你一张\(N(1\leq N\leq 10^5)\)个点\(M(1\leq M\leq 5\times 10 ...
- 【BZOJ3309】DZY Loves Math
Time Limit: 5000 ms Memory Limit: 512 MB Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * ...
随机推荐
- 阿里云服务器上通过Docker部署redmine
背景:在日常工作的过程中会遇到各种各样的问题,每个问题来了之后需要花时间解决.这里就面临两个问题. 1:问题责任不明确,有时候会遇到数据库或者物理服务器的问题,这时候就需要把相应问题指派给相应的人,传 ...
- Android Day2
紧接前一篇日记: 2.增加文本域 在<LinearLayout>中增加<EditText>元素,无格式设置的时候如下. <EditText android:id=&quo ...
- ES--02
第十一讲: 2个node环境下replica shard 是如何分配的 1)replica shard分配:3个primary shard,3个replica shard,1 node(2)prima ...
- python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
1.新闻处理页面redis_news.py #coding:utf-8 import math import redis class RedisNews(object): def __init__(s ...
- jqueryui组件progressbar进度条和日期组件datepickers的简单使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Lua学习总结
由于一些工作上的需要,开始对Lua的学习.之前有JavaScript的基础,而且两者都是脚本语言,所以本总结旨在列出与JavaScript不同的地方,方便后续的回顾和学习.下面进入正题吧! 1.注释 ...
- Tomcat 部署项目的三种方法(转)
转自:https://www.cnblogs.com/ysocean/p/6893446.html#_label0 1.下载 Tomcat 服务器 ①.官网下载地址:http://tomcat.apa ...
- 【原创】大数据基础之Hadoop(2)hdfs和yarn最简绿色部署
环境:3结点集群 192.168.0.1192.168.0.2192.168.0.3 1 配置root用户服务期间免密登录 参考:https://www.cnblogs.com/barneywill/ ...
- boolalpha的作用
#include <iostream>using namespace std;int main(){ bool b=true; cout << &q ...
- 基础常用的数据结构 Collection Map
map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map ...