题目链接 Sandy and Nuts

题意大概就是给出限制条件求出在该限制条件下树的种数。

#include <bits/stdc++.h>

using namespace std;

#define REP(i, n)	for (int i(0); i <  (n); ++i)
#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 15;
const int maxS = 10010;
const int maxQ = 210; int n, m, q, all;
LL f[N][maxS];
int a[maxQ], b[maxQ], c[maxQ];
int e[N][N]; inline in(int i, int S){ return (S >> i) & 1; } LL DP(int u, int S){
LL &ret = f[u][S];
if (ret != -1) return ret; ret = 0;
int St = S ^ (1 << u);
int t; for (t = 0; t < n; ++t) if (in(t, St)) break; for (int __S = St; __S; (--__S) &= St) if (in(t, __S)){
bool flag = true;
REP(i, n) if (i != u){
REP(j, n) if (j != u){
if (e[i][j] && (in(i, __S) ^ in(j, __S))){
flag = false;
break;
}
} if (!flag) break;
} if (!flag) continue; int v, cnt = 0;
REP(i, n){
if (e[u][i] && in(i, __S)){
++cnt;
v = i;
}
} if (cnt >= 2) continue; rep(i, 1, q){
if (c[i] == u && in(a[i], __S) && in(b[i], __S)){
flag = false; break;
} if (in(c[i], __S) && (!in(a[i], __S) || !in(b[i], __S))){
flag = false; break;
}
} if (!flag) continue; if (cnt == 1) ret += DP(v, __S) * DP(u, S ^ __S);
else REP(v, n) if (in(v, __S)) ret += DP(v, __S) * DP(u, S ^ __S);
} return ret;
} int main(){ scanf("%d%d%d", &n, &m, &q);
rep(i, 1, m){
int x, y;
scanf("%d%d", &x, &y);
--x, --y;
e[x][y] = e[y][x] = 1;
} rep(i, 1, q){
scanf("%d%d%d", a + i, b + i, c + i);
--a[i], --b[i], --c[i];
} all = (1 << n) - 1;
memset(f, -1, sizeof f);
REP(i, n) f[i][1 << i] = 1; return 0 * printf("%lld\n", DP(0, all));
}

Codeforces 599E Sandy and Nuts(状压DP)的更多相关文章

  1. CodeForces 599E Sandy and Nuts 状压DP

    题意: 有一棵\(n(1 \leq n \leq 13)\)个节点的树,节点的标号为\(1 \sim n\),它的根节点是\(1\). 现在已知它的\(m(0 \leq m < n)\)条边,和 ...

  2. Codeforces Round #363 LRU(概率 状压DP)

    状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #incl ...

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

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

  4. Codeforces 429C Guess the Tree(状压DP+贪心)

    吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...

  5. Codeforces 895C Square Subsets(状压DP 或 异或线性基)

    题目链接  Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的 ...

  6. 【题解】codeforces 8c Looking for Order 状压dp

    题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...

  7. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  8. codeforces 580D Kefa and Dishes(状压dp)

    题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值.问如果吃m个菜,最大价值是多大.其中n<=18 思路:一看n这么小 ...

  9. Codeforces 342D Xenia and Dominoes 状压dp

    码就完事了. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define ...

随机推荐

  1. Linux 用户管理(三)

    一.userdel --delete a user account and related files -r  --remove 删除用户及家目录 二.id --print real and effe ...

  2. settings.py常规配置项

    settings.py常见配置项 1. 配置Django_Admin依照中文界面显示 LANGUAGE_CODE = 'zh-hans' 2. 数据库配置(默认使用sqlite3) 使用MySQL的配 ...

  3. Gym - 100781G Goblin Garden Guards (扫描线)

    题意: n 只哥布林,每只哥布林都有一个位置坐标. m 个炮台,每个炮台都有一个位置坐标和一个攻击半径. 如果一个哥布林在任何一个炮台的攻击范围内,都会被杀死. 求最后没有被杀死的哥布林的数量. 这题 ...

  4. poj--1064

    题意:有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的绳子的话,这K条绳子最长能有多长?答案保留到小数点后2位. 思路:这些最大最小化问题大多数可以用二分查找的方法来解题 用 d 表 ...

  5. Mysql显示某个数据库的所有表

    显示表名: show tables; //先用use进入要查看表的库 mysql> use mysql; Database changed mysql> show tables; +--- ...

  6. jmeter非常好的博客收藏

    http://blog.sina.com.cn/s/blog_56c9b55c010148os.html

  7. bootstrap3兼容ie8浏览器

    bootstrap3 兼容IE8浏览器 2016-01-22 14:01 442人阅读 评论(0) 收藏 举报  分类: html5(18)    目录(?)[+]   近期在使用bootstrap这 ...

  8. Wannafly模拟赛2

    Contest 时间限制:1秒 空间限制:131072K 题目描述 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得 ...

  9. java EE技术体系——CLF平台API开发注意事项(1)——后端开发

    前言:这是一篇帮助小伙伴在本次项目中快速进入到java EE开发的一些说明,为了让同组小伙伴们开发的时候,有个清晰点的思路.昨天给大家演示分享了基本概况,但没有留下文字总结说明,预防后期有人再次问我, ...

  10. 【Go】Panic函数

    panic(运行时恐慌)是一种只会在程序运行时才回抛出来的异常.在panic被抛出之后,如果没有在程序里添加任何保护措施的话,程序就会在打印出panic的详情,终止运行. 如果一个panic是无意间引 ...