NOIP模拟题 管道


题目大意
给定$n$个点的无向图,求它的$Dfs$序方案数
$n\leq 18$
题解
状压$Dp+$记忆化搜索。
设$F_{i,now}$表示到达$i$其中$now$集合代表的点集已经遍历过,还需要遍历其余点的方案数。
考虑枚举$i$每一个不在点集内部的出边进行记忆化搜索转移。
这样会有一个问题:无法解决回溯。
考虑设$G_{i,now}$表示已选了点集$now$当前位置在$i$,能遍历到的所有最大状态,即当前情况下$i$的子树的集合与$now$的并集。
$G_{i,now}$也可以用记忆化搜索处理。
这样,对于每一个$F_{x,now}$,枚举每一个$\notin now$的$x$的后继$y$,
$$F_{x,now}=\sum F_{x,G_{y,now|y}}\times F_{y,now|y}$$
复杂度$O(n^2 2^n)$
#include<bits/stdc++.h>
#define debug(x) cerr<<#x<<" = "<<x
#define sp <<" "
#define el <<endl
#define LL long long
#define M 20
#define mod 998244353
using namespace std;
int read(){
int nm=0,fh=1; char cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
int n,m,fs[M],sz[M],c[M][M],F[19][1<<19],G[19][1<<19],ans;
#define upd(x,y) x+=y,x=(x>=mod?x-mod:x)
int Trans(int x,int now){
if(G[x][now]>=0) return G[x][now]; G[x][now]=now;
for(int k=1;k<=sz[x];k++){
int to=c[x][k]; if((now>>(to-1))&1) continue;
G[x][now]|=Trans(to,now|(1<<(to-1)));
}return G[x][now];
}
int Dp(int x,int now){
if(Trans(x,now)==now) return 1;
if(F[x][now]>=0) return F[x][now]; F[x][now]=0;
for(int k=1;k<=sz[x];k++){
int to=c[x][k];
if((now>>(to-1))&1) continue;
int t1=Dp(to,now|(1<<(to-1)));
int t2=Dp(x,now|Trans(to,now|(1<<(to-1))));
int res=(LL)t1*(LL)t2%mod; upd(F[x][now],res);
} return F[x][now];
}
int main(){
n=read(),m=read(),memset(G,-1,sizeof(G)),memset(F,-1,sizeof(F));
for(int i=1;i<=m;i++){int x=read(),y=read();c[x][++sz[x]]=y,c[y][++sz[y]]=x;}
for(int i=1;i<=n;i++) upd(ans,Dp(i,1<<(i-1))); printf("%d\n",ans); return 0;
}
NOIP模拟题 管道的更多相关文章
- 【入门OJ】2003: [Noip模拟题]寻找羔羊
这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
- 9.9 NOIP模拟题
9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- NOIP模拟题17.9.26
B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...
- noip模拟题题解集
最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...
- NOIP 模拟题
目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...
- 9.22 NOIP模拟题
吉林省信息学奥赛 2017 冬令营 ...
- 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)
Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...
随机推荐
- jmeter之报告和分析
转载:http://www.cnblogs.com/miaomiaokaixin/p/6118081.html jmeter -n -t 脚本名字.jmx -l xxx.jtl -e -o 指定目录( ...
- 利用同步网盘搭建个人或团队SVN服务器
这篇文章是以前写的,现在强烈推荐两个站.1.http://git.oschina.com 2.http://www.coding.net. 推荐理由:1.可创建私有项目.2.免费稳定.3.VS2013 ...
- JavaScript判断对象 是什么类型的.
// 这种方法不起作用 if (x == undefined) { // 作某些操作 } // 这个方法同样不起作用- if (typeof(x) == undefined) { // 作某些 ...
- Saltstack 命令行:批量覆盖指定文件
master指定文件,覆盖到所有minion命令 salt-cp '*' /etc/hosts /etc/ -------------------------------------------- { ...
- 20145109 《Java程序设计》第七周学习总结
20145109 <Java程序设计>第七周学习总结 Chapter 13 Time & Date Date System.currentTimeMillis() return L ...
- java sleep()和wait()的区别
java sleep()和wait()的区别? sleep()和wait()都能阻塞当前线程. 区别1: sleep()属于Thread类:wait()属于Object类. 区别2: 调用sleep( ...
- DPDK在OpenStack中的实现
随着云计算与大数据的快速发展,其对数据中心网络的性能和管理提出了更高的要求,但传统云计算架构存在多个I/O瓶颈,由于云平台基本上是采用传统的X86服务器加上虚拟化方式组建,随着40G.100G高速网卡 ...
- hackerrankWeek of Code 31
hackerrankWeek of Code 31 A.Beautiful Word B.Accurate Sorting C.Zero-One Game D.Spanning Tree Fracti ...
- 报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus
报错Mapped Statements collection does not contain value for com.atguigu.mybatis.dao.EmployeeMapperPlus ...
- hdu4348区间更新的主席树+标记永久化
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...