Given a simple graph, output the number of simple cycles in it. A simple cycle is a cycle with no repeated vertices or edges.

Input

The first line of input contains two integers n and m (1 ≤ n ≤ 19, 0 ≤ m) – respectively the number of vertices and edges of the graph. Each of the subsequent mlines contains two integers a and b, (1 ≤ a, b ≤ na ≠ b) indicating that vertices aand b are connected by an undirected edge. There is no more than one edge connecting any pair of vertices.

Output

Output the number of cycles in the given graph.

Example

Input
4 61 21 31 42 32 43 4

Output
7

Note

The example graph is a clique and contains four cycles of length 3 and three cycles of length 4.

1-2-3 2-3-4 1-3-4 1-2-4 1-2-3-4 1-2-4-3 1-4-2-3

题意:给出一个图的点数和边数输出这个图中有几个环.

题解:这道题可以很容易想到状压,因为数据也只有19(orz).用sta的二进制表示已经有几个点在这个状态中,那怎么表示形成环呢?只需要找到一个当前状态中的点,它神奇的与前面的某一个点有一条边连着,那么说明肯定能构成环,可以为总答案做贡献.如果不能,那么就为下一个状态提供个数.不过由于是无向图.所以两个点也会被认为成环(两个点构成环的个数为边数),并且每个更大的环都会被计算两次,所以最后要减掉.然后就搞定了.

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;long long dp[1<<20][20],ans=0;
vector<int> e[20];int lowbit(int x)
{return x&(-x);
}int main()
{int n,m,f,t;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d",&f,&t);e[f-1].push_back(t-1);e[t-1].push_back(f-1);}for(int i=0;i<n;i++){dp[1<<i][i]=1;}for(int sta=1;sta<(1<<n);sta++){for(int i=0;i<n;i++){if(dp[sta][i]){for(int k=0;k<e[i].size();k++){int j=e[i][k];if(lowbit(sta)>(1<<j)){continue;}if(sta&(1<<j)){if(lowbit(sta)==(1<<j)){ans+=dp[sta][i];}}else{dp[sta|(1<<j)][j]+=dp[sta][i];          }}}}ans=(ans-m)/2;printf("%lld\n",ans);return 0;
}

每天刷题,身体棒棒!

转载于:https://www.cnblogs.com/stxy-ferryman/p/7637383.html

CodeForces 11D(状压DP 求图中环的个数)相关推荐

  1. 【NOIP模拟】T2 管道(状压dp求图的dfs序方案数)

    f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态 dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的 ...

  2. Felicity's Big Secret Revealed codeforces 757D(状压DP)

    原题地址 题解 算法复杂度 \(O(2^{n}*len*log_2(len))\) dp[i][S] 表示在第 \(i\) 个数后状态为 \(S\) 的时候的方案数. num[i][j] 表示 \(i ...

  3. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  4. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

  5. 【LDU】 Week2自测 Disney‘s FastPass | 状压dp、Floyd

    这题是hdu 4114... 跟着19的打了打周测,发现个好题 写了写还wa了一发 题目大意: 给出n个点,k个要旅游的景点,然后给出k个景点的信息(位置,t,ft,门票所在地点),t于ft表示,如果 ...

  6. QDUOJ 来自xjy的签到题(bfs+状压dp)

    来自xjy的签到题 Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,'#'表示爱丽丝不能到达这个格子,爱丽丝每1分钟 ...

  7. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  8. Codeforces Gym 100676G Training Camp 状压dp

    http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...

  9. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

最新文章

  1. PingCode与Jira 敏捷开发管理能力的对比
  2. Halcon 摄像机标定流程
  3. 陈斌:探索技术领导力的最佳实践
  4. CentOS6.0搭建DNS
  5. 2017年蓝桥杯省赛
  6. re:Invent解读:没想到你是这样的AWS
  7. csv注入java怎么解决_CSV Injection(CSV注入)
  8. mysql文本自动递增_mysql-如何创建自动递增的字符串?
  9. 安卓总线传输协议常用关键词
  10. angular.js的路由和模板在asp.net mvc 中的使用
  11. 改了两天的bug,一个JWT解决了。。。
  12. 【译】Objectively Speaking 2: A Crash Course in Objective-C for iOS 6
  13. 说说我是如何拿下腾讯offer的
  14. CityEngine -俯视图
  15. Day527528529.图灵学院之面试题③ -面经
  16. 家庭中的交换机如何选择?几种常见的交换机选择避坑方法需要知道
  17. 广东省数字经济行业发展动态及十四五前景预测分析报告2022-2027年
  18. 孙陶然:创业是和平年代最靓丽的生活方式
  19. ust (user space tracer)
  20. 学习3ds max—做自行车车轮

热门文章

  1. PAT_B_1094_Java(20分)
  2. 字符串_字符串数组_字符_字符数组
  3. pic10f220 c语言,PIC10F200 LED流水灯程序
  4. c语言 通过sendarp 实现mac,C#通过SendARP()获取WinCE设备的Mac网卡物理地址
  5. 『设计模式』80年代的人们就已经领悟了设计模式-- 发布者/订阅者模式 (包括发布者/订阅者模式和观察者模式的区别)
  6. 模拟实现EXT2文件系统
  7. :)xception_Xception:认识Xtreme盗梦空间
  8. 机器学习初学者_绝对初学者的机器学习
  9. 机器学习结构化学习模型_生产化机器学习模型
  10. Linux进程调度策略分析