热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

UOJ#181.【UR#12】密码锁

一个竞赛图,其中m条边,方向为x−y(xy(xxy−x的概率是1−pi1−pi,

一个竞赛图&#xff0c;其中m条边&#xff0c;方向为x>y(x<y)x−>y(x的概率是pipi&#xff0c;y>xy−>x的概率是1pi1−pi&#xff0c;其他边两个方向的概率都是1212
求强连通分量的期望个数

竞赛图缩点后一定是一条链&#xff0c;前面的点连向后面所有点&#xff0c;我们定义点集SS是这条链的一个前缀当且仅当SV,SVSSVS
那么强连通分量个数等价于缩点后链的前缀SS的个数+1

一种想法是枚举点集S&#xff0c;计算这些边的贡献&#xff0c;但nn很大,2n不能接受
一个大小为xx的前缀,如果连出去的没有特殊边,他的贡献是(12)x(nx)&#xff0c;每有一条概率为pp的特殊边,贡献乘上2p
因为mm很小,一个m条边的联通块至多m&#43;1m&#43;1个点&#xff0c;我们只考虑特殊边&#xff0c;对每个联通块枚举SS里的点,计算Sxx个点在这个联通块里的贡献和
最后再对所有联通块做个背包合并起来

code&#xff1a;

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using namespace std;const int maxn &#61; 50;
const int mod &#61; 998244353;
inline void add(int &a,const int &b){a&#43;&#61;b;if(a>&#61;mod)a-&#61;mod;}int pw(int x,int k)
{int re&#61;1;for(;k;k>>&#61;1,x&#61;(ll)x*x%mod) if(k&1)re&#61;(ll)re*x%mod;return re;
}
int inv(int x){ return pw(x,mod-2); }int n,m,Inv;
int e[maxn][4];
struct edge{int y,i,nex;}a[maxn*maxn]; int len,fir[maxn];
inline void ins(const int x,const int y,const int i){a[&#43;&#43;len]&#61;(edge){y,i,fir[x]};fir[x]&#61;len;}vector<int>V[maxn],Ve[maxn];
int vis[maxn],cnt,id[maxn];
void dfs(const int x)
{V[vis[x]&#61;cnt].push_back(x); id[x]&#61;(int)V[cnt].size();for(int k&#61;fir[x],y&#61;a[k].y;k;k&#61;a[k].nex,y&#61;a[k].y)if(xfor(int k&#61;fir[x],y&#61;a[k].y;k;k&#61;a[k].nex,y&#61;a[k].y) if(!vis[y])dfs(y);
}
int sum[1<<20],g[maxn][maxn];
void Solve(const int now)
{int vn&#61;(int)V[now].size(),al&#61;1<for(int i&#61;0;iint tc&#61;1;for(int j&#61;0;j<(int)Ve[now].size();j&#43;&#43;){int k&#61;Ve[now][j],x&#61;e[k][0],y&#61;e[k][1];if((i>>(id[x]-1)&1)^(i>>(id[y]-1)&1))tc&#61;(ll)tc*((i>>(id[x]-1)&1)?e[k][2]:e[k][3])%mod*2ll%mod;}sum[i]&#61;sum[i>>1]&#43;(i&1);add(g[now][sum[i]],tc);}
}
int f[maxn],temp[maxn];int main()
{Inv&#61;inv(10000);scanf("%d%d",&n,&m);for(int i&#61;1;i<&#61;m;i&#43;&#43;){int x,y,w; scanf("%d%d%d",&x,&y,&w);e[i][0]&#61;x,e[i][1]&#61;y; w&#61;(ll)w*Inv%mod;e[i][2]&#61;w;e[i][3]&#61;(1-w&#43;mod)%mod;ins(x,y,i); ins(y,x,i);}for(int i&#61;1;i<&#61;n;i&#43;&#43;) if(!vis[i]){&#43;&#43;cnt,dfs(i);Solve(cnt);}f[0]&#61;1; int nowsum&#61;0;for(int i&#61;1;i<&#61;cnt;i&#43;&#43;){for(int j&#61;0;j<&#61;nowsum&#43;(int)V[i].size();j&#43;&#43;) temp[j]&#61;0;for(int j&#61;0;j<&#61;nowsum;j&#43;&#43;) for(int k&#61;0;k<&#61;(int)V[i].size();k&#43;&#43;)add(temp[j&#43;k],(ll)f[j]*g[i][k]%mod);nowsum&#43;&#61;(int)V[i].size();for(int j&#61;0;j<&#61;nowsum;j&#43;&#43;) f[j]&#61;temp[j];}int ans&#61;0,inv2&#61;inv(2);for(int i&#61;1;i1);ans&#61;(ll)ans*pw(10000,n*(n-1))%mod;printf("%d\n",ans);return 0;
}


推荐阅读
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 在学习网页爬虫时,使用Selenium进行自动化操作。初次安装selenium模块后,第二天运行代码时遇到了ImportError:无法从'selenium'导入名称'webdriver'。本文将详细解释该问题的原因及解决方案。 ... [详细]
  • Python入门:第一天准备与安装
    本文详细介绍了Python编程语言的基础知识和安装步骤,帮助初学者快速上手。涵盖Python的特点、应用场景以及Windows环境下Python和PyCharm的安装方法。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 解决Anaconda安装TensorFlow时遇到的TensorBoard版本问题
    本文介绍了在使用Anaconda安装TensorFlow时遇到的“Could not find a version that satisfies the requirement tensorboard”错误,并提供详细的解决方案,包括创建虚拟环境和配置PyCharm项目。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文详细介绍了如何通过现代化工具快速、高效地安装Python第三方模块,帮助开发者简化安装流程并提高开发效率。 ... [详细]
  • 深入理解 .NET 中的中间件
    中间件是插入到应用程序请求处理管道中的组件,用于处理传入的HTTP请求和响应。它在ASP.NET Core中扮演着至关重要的角色,能够灵活地扩展和自定义应用程序的行为。 ... [详细]
  • 本文详细介绍了如何将 Python 3.6.3 程序转换为 Windows 可执行文件(.exe),并解决了使用 py2exe 和 cx_Freeze 时遇到的问题。推荐使用 PyInstaller 进行打包,提供完整的安装和打包步骤。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
author-avatar
搬地瓜per
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有