题目大意

给定$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模拟题 管道的更多相关文章

  1. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  4. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  5. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

  6. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  7. NOIP 模拟题

    目录 T1 : grid T2 : ling T3 : threebody 数据可私信我. T1 : grid 题目:在一个\(n*n\)的方格中,你只能斜着走.为了让问题更简单,你还有一次上下左右走 ...

  8. 9.22 NOIP模拟题

    吉林省信息学奥赛 2017 冬令营                                                                                    ...

  9. 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)

    Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...

随机推荐

  1. DataNode启动不成功——java.net.BindException: Port in use: localhost:0 Caused by: java.net.BindException: Cannot assign requested address解决办法

    爱折腾的人总是会出线各种奇怪的问题.记得之前听一位大师讲过,我们不能踩完前进路上的所有坑前进,而应该学会怎样避开前进路上的坑,踩得坑越多,可能你的经验越丰富,但是付出的时间代价可能不是经验能换来的.我 ...

  2. jQuery单选多选按钮选中美化特效

    在线演示 本地下载

  3. SQuirrel-GUI工具安装手册-基于phoenix驱动

    背景描述: SQuirrel sql client 官方地址:http://www.squirrelsql.org/index.php?page=screenshots 一个图形界面的管理工具 安装手 ...

  4. Python 面向对象的三大特性:封装,继承,多态

    # 面向对象的三大特性:封装,继承,多态 # 继承的影响:资源的继承,资源的使用,资源的覆盖,资源的累加 # 资源的继承,在Python中的继承是指能使用父类的资源,而不是说在子类也复制一份父类代码到 ...

  5. 一个线程知识点, 一个MongoDB的知识点

    //WINForm窗体中切换前后台线程执行任务: protected void RunOnUI(Action action) { Invoke(action); } protected void Ru ...

  6. Nginx配置端口访问的网站

    server { listen 80; #listen [::]:80 default_server ipv6only=on; server_name www.website.com; index i ...

  7. dll隐式链接延迟加载

    dll隐式链接延迟加载 程序隐式链接dll后,启动程序将自动加载dll,查找路径依次是: 1:当前文件路径: 2:使用SetDLLDirectory设置的路径: 3:系统路径,system32文件夹, ...

  8. JavaScript 兼容各大浏览器阻止冒泡事件

    JavaScript 兼容各大浏览器阻止冒泡事件 function stopEvent(event) { //阻止冒泡事件 //取消事件冒泡 var e = arguments.callee.call ...

  9. extundelete实现Linux下文件/文件夹数据恢复!

    我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. 这里用:yum install e2fsprogs ...

  10. RadioButton实现多选一

    RadioButton实现多选一 一.简介 二.RadioButton实现多选一方法 1.将多个RadioButton放在一个RadioGroup里面 <RadioGroup android:i ...