51Nod-1833-环
来源:互联网 发布:上别人女朋友感觉知乎 编辑:程序博客网 时间:2024/05/16 12:29
ACM模版
描述
题解
图论的问题我没有怎么深入学习,多数都是交给了队友去搞,所以看到这个题时,只知道是图上状压
看了题解发现,原来形成不相交的简单环其实就是二分图的完美匹配,最后要求的就是二分图的完美匹配的个数取模。所以我们定义
代码
#include <iostream>#include <vector>#include <math.h>using namespace std;const int MAXN = 22;const int MAXM = (1 << 20) + 5;const int MOD = 998244353;int n, m;int dp[MAXN][MAXM];vector<int> vi[MAXN];template <class T>inline void scan_d(T &ret){ char c; ret = 0; while ((c = getchar()) < '0' || c > '9'); while (c >= '0' && c <= '9') { ret = ret * 10 + (c - '0'), c = getchar(); }}int cal(int x){ int ret = 0; while (x) { if (x & 1) { ret++; } x >>= 1; } return ret;}int main(){ scan_d(n); scan_d(m); int u, v; for (int i = 1; i <= m; i++) { scan_d(u); scan_d(v); vi[u].push_back(v); } dp[0][0] = 1; for (int i = 1; i <= n; i++) { int t = 1 << n; for (int j = 0; j < t; j++) { if (cal(j) == i) { for (int k = 0; k < vi[i].size(); k++) { v = vi[i][k]; if ((j >> (v - 1)) & 1) { dp[i][j] = (dp[i][j] + dp[i - 1][j ^ (1 << (v - 1))]) % MOD; } } } } } printf("%d\n", dp[n][(1 << n) - 1]); return 0;}
阅读全文
0 0
- 51Nod-1833-环
- 51nod 1833 环 (dp)
- 51nod 1833 环 状压dp+图论
- 51nod 1073 约瑟夫环
- 51nod-1073约瑟夫环
- 51nod 1073 约瑟夫环
- 51nod 1073 约瑟夫环
- 51nod 1073 约瑟夫环
- 51nod 5173 约瑟夫环
- 51Nod - 1416 搜索环
- 51NOD 1073 约瑟夫环
- 51Nod 1073 约瑟夫环
- 51 nod 1073 约瑟夫环
- 51Nod-1073-约瑟夫环
- 51nod 1073 约瑟夫环
- 51Nod 1073 约瑟夫环
- 51Nod-1073 约瑟夫环
- 51nod 1073 约瑟夫环
- opencv打开摄像头并截取图片
- 深度学习中的卷积与反卷积
- SpringBoot鸡汤(各个注解集合二)
- KVC/KVO 的使用以及实现原理
- Python里的OS模块常用函数说明
- 51Nod-1833-环
- 两句话掌握 Python 最难知识点:元类
- Android打包的那些事
- Android报错:android.view.InflateException: Binary XML file line #0: Error inflating class TextView
- C#远程连MYSQL数据库服务器
- DIV&CSS
- Linux第一次安装,设置Root密码
- android开发之Glide加载RelativeLayout背景图
- jquery选择器和遍历总结