【LOJ】 #2540. 「PKUWC2018」随机算法

题解

感觉极其神奇的状压dp

\(dp[i][S]\)表示答案为i,然后不可选的点集为S
我们每次往答案里加一个点,然后方案数是,设原来可以选的点数是y,新加入一个点后导致了除了新加的点之外x个点不能选,那么方案就是把x个数在y - 1(由于空余位置的第一个要放我们选的那个点)个位置里任意排列,方案数是\(A^{y - 1}_{x}\)

复杂度是\(O(n^2 2^n)\)但是由于我们及时的break掉它跑的飞快= =

代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#define enter putchar('\n')
#define space putchar(' ')
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define pii pair<int,int>
#define eps 1e-7
#define MAXN 3005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {putchar('-');x = -x;}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}const int MOD = 998244353;int N,M;
int fac[25],invfac[25],inv[25];
int AD[25],dp[25][(1 << 20) + 5],cnt[(1 << 20) + 5],A[25][25];
bool vis[(1 << 20) + 5];
int lowbit(int x) {return x & (-x);
}
int mul(int a,int b) {return 1LL * a * b % MOD;
}
int inc(int a,int b) {return a + b >= MOD ? a + b - MOD : a + b;
}
void Init() {inv[1] = 1;for(int i = 2 ; i <= 20 ; ++i) inv[i] = mul(inv[MOD % i],MOD - MOD / i);invfac[0] = fac[0] = 1;for(int i = 1 ; i <= 20 ; ++i) fac[i] = mul(fac[i - 1],i),invfac[i] = mul(invfac[i - 1],inv[i]);read(N);read(M);int u,v;for(int i = 1 ; i <= M ; ++i) {read(u);read(v);AD[u] |= 1 << v - 1;AD[v] |= 1 << u - 1;}for(int i = 1 ; i <= N ; ++i) AD[i] |= 1 << i - 1;for(int i = 1 ; i < (1 << N) ; ++i) cnt[i] = cnt[i - lowbit(i)] + 1;
}
void Solve() {vis[0] = 1;int c = 0;for(int i = 1 ; i < (1 << N) ; ++i) {for(int j = 1 ; j <= N ; ++j) {if(i >> (j - 1) & 1) {if(!(AD[j] & (i ^ (1 << j - 1)))) {vis[i] |= vis[i ^ (1 << j - 1)];}break;}}if(vis[i]) c = max(c,cnt[i]);}for(int i = 0 ; i <= N ; ++i) {for(int j = 0 ; j <= i ; ++j) {A[i][j] = mul(fac[i],invfac[i - j]);}}dp[0][0] = 1;for(int i = 0 ; i < N ; ++i) {for(int S = 0 ; S < (1 << N) ; ++S) {if(!dp[i][S]) continue;for(int j = 1 ; j <= N ; ++j) {if((1 << j - 1) & S) continue;dp[i + 1][S | AD[j]] = inc(dp[i + 1][S | AD[j]],mul(dp[i][S],A[N - cnt[S] - 1][cnt[S | AD[j]] - cnt[S] - 1]));}}}int ans = 0;for(int S = 0 ; S < (1 << N) ; ++S) {ans = inc(ans,dp[c][S]);}out(mul(ans,invfac[N]));enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifInit();Solve();
}

转载于:https://www.cnblogs.com/ivorysi/p/9217425.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shiro的authc过滤器的执行流程

1.先执行isAccessAllowed()&#xff0c;通过subject.isAuthenticated()判断当前session中的subject是否已经登陆过。如果在当前session即会话中已经登陆过&#xff0c;返回true&#xff0c;authc过滤器放行请求到loginUrl。 问题? 这里会有一个问题&#xff0c;如果我登陆成功…

SpringBoot之基础

简介 背景 J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大 特点 ① 快速创建独立运行的spring项目以及主流框架集成 ② 使用嵌入式的Servlet容器, 应用无需达成war包 ③ starters自动依赖和版本控制 ④ 大量自动配置, 简化开发, 也可修…

[Java核心技术(卷I)] - vscode手动编译运行继承类

参考 - P160~P161 主要有3个类: 一个测试类(ManagerTest)、一个子类(Manager)、一个父类(Employee) 注意点: -1. 使用 javac -d . *.java进行预编译 目录结构入下: 此时会生成目录结构如下: 之后运行 java com.inheritance.ManagerTest 附上几个类的代码 // com.inhe…

mysql常用语句和函数

mysql语句如果长期不写&#xff0c;就会忘掉&#xff0c;所以要时常复习&#xff0c;温故而知新。 1.select length("中国人"),select char_length("中国人"); 2建立数据库的语句 use new_schema;create table ta(id int primary key);这是小括号&#xff…

shiro框架@RequiresPermissions 解释

RequiresAuthentication 验证用户是否登录&#xff0c;等同于方法subject.isAuthenticated() 结果为true时。 RequiresUser 验证用户是否被记忆&#xff0c;user有两种含义&#xff1a; 一种是成功登录的&#xff08;subject.isAuthenticated() 结果为true&#xff09;&…

【Social Listening实战】当数据分析遭遇心理动力学:用户深层次的情感需求浮出水面...

本文转自知乎 作者&#xff1a;苏格兰折耳喵 ————————————————————————————————————————————————————— 本文篇幅较长&#xff0c;分为五部分&#xff0c;在中间部分有关于心理分析工具的介绍&#xff0c;案例分散在第二部…

Python 字符串切片

#-*- coding:utf-8 -*-#字符串切片names "abcdefgh"切片语法 names[起始位置:终止位置:步长] 起始位置:即字符串的下标&#xff0c;可以是正序下标(0,1,2...)&#xff0c;也可以是逆序下标(-1,-2,-3...) 终止位置:也是字符串的下标&#xff0c;但是和起始位置下标不…

[Java核心技术(卷Ⅰ)] - 判断相等

参考 - P184 public boolean equals(Object otherObject) {// a quick test to see if the objects are identicalif (this otherObject) return true;// must return false if the explicit parameter is nullif (otherObject null) return null;// if the classes dont ma…

Oracle 11g DG主库节点2 ORA-00245: control file backup fail

--节点1报错 Sun Dec 09 08:29:57 2018Control file backup creation failed: failure to open backup target file /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zwdb.ctl.Errors in file /u01/app/oracle/diag/rdbms/zwdb/zwdb2/trace/zwdb2_arc0_167660.trc:ORA-27037: …

hive字符函数

转载于:https://www.cnblogs.com/ggzhangxiaochao/p/9222732.html

java动态编译

编译&#xff0c;一般来说就是将源代码转换成机器码的过程&#xff0c;比如在C语言中中&#xff0c;将C语言源代码编译成a.out,&#xff0c;但是在Java中的理解可能有点不同&#xff0c;编译指的是将java 源代码转换成class字节码的过程&#xff0c;而不是真正的机器码&#xf…

[c++] - 简单的冒泡

#include <iostream> using namespace std;int main() {// 利用冒泡排序实现升序序列int arr[9] {4, 2, 8, 0, 5, 7, 1, 3, 9};cout << "排序前: " << endl;for (int i 0; i < 9; i){cout << arr[i] << " ";}cout <…

Python爬虫之解析网页

常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,urlhttps://movie.douban.com/cinema/nowplaying/beijing/ 网页分析 部分网页源码 <ul class"lists"><liid"3878007"class"list-item"data-title"…

腾讯企业邮箱报错 smtp.exmail.qq.comport 465, isSSL false

一、报错 "smtp.exmail.qq.com" port 465, isSSL false 通过网上搜索查询一些资料&#xff0c;推测是邮箱的配置出问题了。 二、修改邮箱配置 1 // 创建属性2 Properties props new Properties();3 props.setProperty("mail.transport.protocol", "s…

spring与JDK版本对应关系

搭建spring框架得时候要考虑jdk的版本&#xff0c;提供一下参考 JDK 8 中可以使用 Spring Framework 5.x JDK 7 中可以使用 Spring Framework 4.x JDK 6 中可以使用 Spring Framework 4.x JDK 5 中可以使用 Spring Framework 3.x

Markdown预览功能不可用解决方案

初学者在使用Markdown时也许会遇到这个问题 原因是电脑缺少一个组件&#xff0c;解决方案很简单&#xff0c;安装上就好了&#xff0c;以下是链接 http://markdownpad.com/download/awesomium_v1.6.6_sdk_win.exe转载于:https://www.cnblogs.com/j9oker/p/10092829.html

Linux 中yum的配置

1.进入yum的路径 cd /etc/yum.repos.d 2.将原始的repo文件移入一个新建的backup文件下做备份 mv CentOS* backup 3.在/etc/yum.repos.d下新建一个自己的文件(这里的文件必须以repo结尾); vi zhi.repo 其中&#xff0c;第一行必须是[文件名]的格式  是一个标记 name*** 这是一…

[生态建设] - js判断小技巧

0、参考 说明: 从几个易得的点出发,逐步向外扩展延申,保证代码的可靠性 1、判断是否为某个类型 // 判断是否为 null const isNull o > {return o null; };// 判断是否为 undefined const isUndefined o > {return o undefined; };// 判断是否为 null or undefined…

Spring中Bean的概念

一、Bean的定义 <beans…/>元素是Spring配置文件的根元素&#xff0c;<beans…/>元素可以包含多个<bean…/>子元素&#xff0c;每个<bean…/>元素可以定义一个Bean实例&#xff0c;每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两…

[TJOI2010]阅读理解

题目描述 英语老师留了N篇阅读理解作业&#xff0c;但是每篇英文短文都有很多生词需要查字典&#xff0c;为了节约时间&#xff0c;现在要做个统计&#xff0c;算一算某些生词都在哪几篇短文中出现过。 输入输出格式 输入格式&#xff1a; 第一行为整数N&#xff0c;表示短文篇…