题意:

N个点构成的无向图,M条边描述这个无向图。

问这个无向图中共有多少个环。

(1 ≤ n ≤ 19, 0 ≤ m)

思路:

例子:

4 6

1 2

1 3

1 4

2 3

2 4

3 4

答案:7

画个图发现,直接暴力DFS有太多的重复计算。用DP。

枚举点数(状态),每个状态的起点、终点(起点可以不用枚举,因为反正是一个环,谁作为起点都一样)。

dp[S][i]:状态是S,i是终点   含义:从S中的第一个数s出发到达第i个点的方案数。如果s和i相加,总方案数ans+=dp[S][i]

dp[S][i]=sigma(dp[S'][i'])  S'是去掉第i个点后的点集,i'属于S'且i'和i相连。

*结果除以2的原因:例:1-2-3-4-1   实际上和1-4-3-2-1是一样的。

代码:

int n,m;
char G[25][25];
int S[1<<19]; //全局状态
int cnS;
int P[25]; //全局指针
int cnP;
ll dp[(1<<19)+5][25];
ll ans; void finds(int nn,int fNum,int nowNum,int nowPos,int Ss){ //长度为nn,共要放fNum个,现在已放nowNum个,现在正在nowPos位置要进行第nowNum+1个放置的尝试
if(nowNum==fNum){
S[++cnS]=Ss;
return;
}
int t1=fNum-nowNum;
rep(i,nowPos,nn-t1+1){
int nSs=Ss+(1<<(i-1));
finds(nn,fNum,nowNum+1,i+1,nSs);
}
}
void calc(int nn,int S){ //总长度为nn,计算状态S哪些位置上为1,存在全局指针P【】中。
cnP=0;
rep(i,1,nn){
int t=(1<<(i-1));
if((S&t)>0){
P[++cnP]=i;
}
}
}
void init(){
cnS=0;
cnP=0;
finds(n,2,0,1,0);
mem(dp,0); rep(i,1,cnS){
int ss=S[i];
calc(n,ss);
rep(j,2,cnP){
if(G[P[1]][P[j]]==1){
dp[ss][P[j]]=1;
}
}
}
}
void solve(){
rep(i,3,n){ //状态由i个点构成
cnS=0;
cnP=0;
finds(n,i,0,1,0);
rep(tt,1,cnS){
int ss=S[tt];
calc(n,ss);
rep(j,2,cnP){
int pj=P[j]; //终点
int nss=ss-(1<<(pj-1)); //上一个状态
rep(k,2,cnP){ //枚举终点
if(k==j) continue;
if(G[pj][P[k]]==0) continue;
int pk=P[k];
dp[ss][pj]+=dp[nss][pk];
}
if(G[P[1]][pj]==1){
ans+=dp[ss][pj];
}
}
}
}
} int main(){
cin>>n>>m; mem(G,0);
while(m--){
int a,b;
scanf("%d%d",&a,&b);
G[a][b]=G[b][a]=1;
} if(n==1 || n==2){
puts("0");
}
else{
init();
ans=0;
solve();
printf("%I64d\n",ans/2);
} return 0;
}

cf 11D A Simple Task(状压DP)的更多相关文章

  1. CF11D A Simple Task 状压DP

    传送门 \(N \leq 19\)-- 不难想到一个状压:设\(f_{i,j,k}\)表示开头为\(i\).结尾为\(j\).经过的点数二进制下为\(k\)的简单路总数,贡献答案就看\(i,j\)之间 ...

  2. CF 11D A Simple Task 题解

    题面 这道题的数据范围一看就是dfs或状压啦~ 本文以状压的方式来讲解 f[i][j]表示目前的节点是i,已经经历过的节点的状态为j的简单环的个数: 具体的转移方程和细节请看代码: PS:(i& ...

  3. CF11D A Simple Task(状压DP)

    \(solution:\) 思路大家应该都懂: 状压DP:\(f[i][j]\),其中 \(i\) 这一维是需要状压的,用来记录19个节点每一个是否已经走过(走过为 \(1\) ,没走为 \(0\) ...

  4. FZU - 2218 Simple String Problem(状压dp)

    Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...

  5. FZU - 2218 Simple String Problem 状压dp

    FZU - 2218Simple String Problem 题目大意:给一个长度为n含有k个不同字母的串,从中挑选出两个连续的子串,要求两个子串中含有不同的字符,问这样的两个子串长度乘积最大是多少 ...

  6. codeforces Diagrams & Tableaux1 (状压DP)

    http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...

  7. fzu2188 状压dp

    G - Simple String Problem Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  8. HDU5816 Hearthstone(状压DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an online collec ...

  9. BZOJ-1087 互不侵犯King 状压DP+DFS预处理

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...

随机推荐

  1. 【Python】python 2.7.16 x64 百度网盘

    倒霉官网下载太慢,下好了分享出来,也给自己留一个备份. 链接:点这里提取码:znaf PS: py2.7版本 for win 64位

  2. 433MHZ SPI模块使用心得

    最近使用了433MHZ的模块进行了一个通讯项目,选用的是SX1208模块,对接了RTOS和Linux两个操作系统,使用心得如下: 1. 首先要拿来datasheet看一遍,通揽一下它的功能.可以得到一 ...

  3. javascript 标签轮播

    html <div id="banner-switch"> <!-- 切换内容 --> <div class="notice-content ...

  4. Fiddler修改抓包请求

    hi,说到fiddler的用途,第一时间想到抓包,不过还有一个功能是:支持修改请求. 那么问题来了,怎么做呢?很简单,先定下我们需要修改哪个请求. 这里用F12跟fiddler做演示. 首先我们在F1 ...

  5. 多项目如何高效协同合作 | springcloud系列之bus消息总线

    前言 在springcloud config章节中我们完成了配种中心的搭建,以及通过配置中心完成配置的抽离通过springcloud config模块我们将配置抽离到git仓库中我们不必要每次为了改配 ...

  6. 我惊了!CompletableFuture居然有性能问题!

    你好呀,我是歪歪. 国庆的时候闲来无事,就随手写了一点之前说的比赛的代码,目标就是保住前 100 混个大赛的文化衫就行了. 现在还混在前 50 的队伍里面,稳的一比. 其实我觉得大家做柔性负载均衡那题 ...

  7. Python小知识之对象的比较

    好久不见 国庆回了趟老家,躺平了10天.作息时间基本和小学生差不多,8.9点就睡了, 那滋味别提多舒服了.时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了. 今天就结合日常生活的 ...

  8. Go语言核心36讲(Go语言基础知识二)--学习笔记

    02 | 命令源码文件 我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件. 这里的源码文件又分为三种,即:命令源码文件.库源码文件和测 ...

  9. Serverless 是一种思想状态

    来源 | Serverless 公众号:作者 | Ben Kehoe:译者 | donghui 函数不是重点 如果你因为喜欢 Lambda 而选择 Serverless,你这样做的原因是错误的.如果你 ...

  10. (googlechrome)未知错误导致安装失败,如果googlechrome....

    ​https://jingyan.baidu.com/article/ea24bc39ffb699da63b33147.html#5827690-tsina-1-63512-fe183374908e7 ...