[UOJ181]密码锁
这个完全图随机定向后是一个竞赛图,将它的强连通分量缩点后我们得到的东西类似一条链,每个点往它后面的所有点连边
在这条链上,我们可以把点划分为两个点集$S,T$使得没有从$T$中点到$S$中点的边($S,T$对应到原图中同样满足条件),那么原图强连通分量个数$=$缩点后的点数$=$划分方案数$+1$,所以期望下的划分方案数$+1$即为答案
令$p_{x,y}$表示$(x,y)$被定向成$x\rightarrow y$的概率(不算非特殊边),那么划分方案数的期望就是$\sum\limits_{S\cup T=V}\prod\limits_{x\in S,y\in T}p_{x,y}$,所以当$m=0$时答案为$\sum\limits_{i=1}^{n-1}\binom ni\left(\frac12\right)^{i(n-i)}$
当$m\neq0$时,我们先硬点每条边的概率为$\frac12$,对于题中给出的那些特殊边,若它的概率为$p$,那么它对概率的贡献为$2p$
对每一个特殊边连接的弱连通块,求出$f_i$表示有$i$个点$\in S$的概率,这里直接枚举弱连通块的每个点属于$S$还是$T$即可,因为有$m$条边的连通块最多有$m+1$个点,所以枚举的时间复杂度为$O(2^m)$
每求完一个弱连通块的$f$,将它和答案$g$卷积即可,最终答案即为$\sum\limits_{i=1}^{n-1}g_i\left(\frac12\right)^{i(n-i)}$
所以说要是做过这个题的话一眼秒掉GDOI2018D1T4应该不成问题...
#include<stdio.h> #include<string.h> typedef long long ll; const int mod=998244353,i2=499122177,i5=595552581; int mul(int a,int b){return(ll)a*b%mod;} int pow(int a,int b){ int s=1; while(b){ if(b&1)s=mul(s,a); a=mul(a,a); b>>=1; } return s; } void inc(int&a,int b){(a+=b)%=mod;} int d[40][40],p[40],a[40],b[40],f[40],g[40],h[40],E,M,n; bool v[40],s[40]; void dfs(int x){ v[x]=1; p[M++]=x; for(int i=1;i<=n;i++){ if(~d[x][i]){ if(x<i){ a[E]=x; b[E]=i; E++; } if(!v[i])dfs(i); } } } int main(){ int m,i,j,k,x,y,z,t,S; scanf("%d%d",&n,&m); memset(d,-1,sizeof(d)); while(m--){ scanf("%d%d%d",&x,&y,&z); d[x][y]=mul(z,i5); d[y][x]=mul(10000-z,i5); } f[0]=1; for(i=1;i<=n;i++){ if(!v[i]){ E=M=0; dfs(i); memset(g,0,sizeof(g)); for(j=0;j<1<<M;j++){ S=0; for(k=0;k<M;k++)S+=(s[p[k]]=j>>k&1); t=1; for(k=0;k<E;k++){ if(s[a[k]]&&!s[b[k]])t=mul(t,d[a[k]][b[k]]); if(!s[a[k]]&&s[b[k]])t=mul(t,d[b[k]][a[k]]); } inc(g[S],t); } memset(h,0,sizeof(h)); for(j=0;j<=n-M;j++){ for(k=0;k<=M;k++)inc(h[j+k],mul(f[j],g[k])); } memcpy(f,h,sizeof(h)); } } t=1; for(i=1;i<n;i++)inc(t,mul(f[i],pow(i2,i*(n-i)))); inc(t,mod); printf("%d",mul(t,pow(10000,n*(n-1)))); }
[UOJ181]密码锁的更多相关文章
- openjudge8469特殊密码锁[贪心]
描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...
- NOI OpenJudge 8469 特殊密码锁 Label贪心
描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...
- Android 九宫格密码锁进入程序
设置九宫格密码锁进入程序,设置,重置,取消等,安卓巴士地址http://www.apkbus.com/forum.php?mod=viewthread&tid=182620&extra ...
- iOS开发——高级技术&密码锁功能的实现
密码锁功能的实现 一个ios手势密码功能实现 ipad/iphone 都可以用 没有使用图片,里面可以通过view自己添加 keychain做的数据持久化,利用苹果官方KeychainItemWrap ...
- [51nod1357]密码锁
有一个密码锁,其有N位,每一位可以是一个0~9的数字,开启密码锁需要将锁上每一位数字转到解锁密码一致.这个类似你旅行用的行李箱上的密码锁,密码锁的每一位其实是一个圆形转盘,上面依次标了0,1,...9 ...
- 基于VHDL利用PS2键盘控制的电子密码锁设计
基于VHDL利用PS2键盘控制的密码锁设计 附件:下载地址 中文摘要 摘 要:现代社会,人们的安全意识正在不断提升.按键密码锁由于其具有方便性.低成本等特征,还是大有用武之地的.但是通常的按键密码锁开 ...
- poj 8469 特殊密码锁
a:特殊密码锁 总时间限制: 1000ms 内存限制: 1024kB 描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头 ...
- UVa 1631 密码锁
https://vjudge.net/problem/UVA-1631 题意: 有一个n位密码锁,每位都是0~9,可以循环旋转.每次可以让1~3个相邻数字同时往上或者往下转一格.输入初始状态和终止状态 ...
- 【小梅哥FPGA进阶教程】第十二章 数字密码锁设计
十二.数字密码锁设计 本文由山东大学研友袁卓贡献,特此感谢 实验目的 实现数字密码锁设计,要求矩阵按键输出且数码管显示输入密码,密码输入正确与否均会有相应标志信号产生. 实验平台 芯航线FPGA核心板 ...
随机推荐
- mac系统用docker安装oracle数据库
oracle没有mac可用的版本,最好的办法是通过docker安装 一.下载docker 1.通过brew下载 brew cask install docker 2.手动下载(需要vpn) https ...
- MongoDB安装配置及使用
1.安装配置:https://www.cnblogs.com/ymwangel/p/5859453.html 2.使用 from pymongo import MongoClient #连接 conn ...
- bzoj 2258 splay
类似于1014,用splay维护这个序列,维护每个节点为根的子树的hash值,对于一个询问二分答案判断就行了. 反思:询问的时候因为是原序列的x,y,所以开始的时候直接splay(x-1)了,后来发现 ...
- [NOIP2011]刷水
前几天做了NOIP2011的题,感觉不是那么难. 这边先做了两天的前两题,T3还没打. D1T1:顺次读入,分别判断是否覆盖即可,照例大水: #include<cstdio> ],b[], ...
- 【Python问题解决】关于解决python3.x无法使用PIL库的解决方法
因为PIL库目前只更新到python2.x,故python3.x直接安装PIL库会找不到版本.但是python3.x有一个新的库,可以提供和PIL差不多的功能,也就是pillow库. 本人使用的是py ...
- 阿里云ECS安装Docker
阿里云ESC系统信息,官方说2.6内核运行docker服务可能会不稳定: $ uname -a Linux iZ259dixwg8Z -.el6.x86_64 # SMP Thu Jul :: UTC ...
- MAC Pro 2017款 无线上网慢
MAC Pro 2017款 在无线路由器和MAC相隔一个房间,上网很慢,怀疑是无线路由器有问题,但其他几台老款MAC和PC上网正常.后来将蓝牙关掉,上网就很快了.
- Mybatis插入数据返回自增主键
方法有很多,参考 mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey 这里记录一下工作中自己用到的selectkey方法的详细过程. po ...
- Majority Element——算法课上的一道题(经典)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- BZOJ 1901: Zju2112 Dynamic Rankings 区间k大 带修改 在线 线段树套平衡树
之前写线段树套splay数组版..写了6.2k..然后弃疗了.现在发现还是很水的..嘎嘎.. zju过不了,超时. upd:才发现zju是多组数据..TLE一版才发现.然后改了,MLE...手写内存池 ...