【BZOJ 4455】【UOJ #185】【ZJOI 2016】小星星
http://www.lydsy.com/JudgeOnline/problem.php?id=4455
有一个$O(n^n)$的暴力,放宽限制可以转化成$O(2^n)$的容斥,容斥每一层统计用$O(n^3)$的dp来统计。时间复杂度$O(n^3 2^n)$。
卡常!存图用邻接表!减小非递归函数的使用,尽量写到主函数里!
最后终于卡过了QwQ
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 20;
int in() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 3) + (k << 1) + c - '0';
return k * fh;
} ll f[N][N];
bool mp[N][N];
struct node {int nxt, to;} T[N << 1];
int pointT[N], cntT = 0, n, m, fa[N], use[N], usenum; void insT(int u, int v) {T[++cntT] = (node) {pointT[u], v}, pointT[u] = cntT;} void mkfa(int x) {
for(int i = pointT[x]; i; i = T[i].nxt)
if (T[i].to != fa[x]) {
fa[T[i].to] = x;
mkfa(T[i].to);
}
} ll cal(int x, int y) {
ll mul = 1, ret; int v;
for(int i = pointT[x]; i; i = T[i].nxt)
if ((v = T[i].to) != fa[x]) {
ret = 0;
for(int j = 1; j <= usenum; ++j)
if (mp[y][use[j]]) ret += f[v][use[j]];
mul *= ret;
}
return mul;
} void dfs(int x) {
for(int i = pointT[x]; i; i = T[i].nxt)
if (T[i].to != fa[x]) dfs(T[i].to); for(int i = 1; i <= usenum; ++i)
f[x][use[i]] = cal(x, use[i]);
} int main() {
n = in(); m = in();
int u, v;
for(int i = 1; i <= m; ++i) {
u = in(); v = in();
mp[u][v] = mp[v][u] = true;
}
for(int i = 1; i < n; ++i) {
u = in(); v = in();
insT(u, v); insT(v, u);
} fa[1] = 0; mkfa(1); int tot = (1 << n) - 1, mu = n & 1;
ll ret, ans = 0;
for(int i = 1; i <= tot; ++i) {
usenum = 0;
for(int j = 0; j < n; ++j)
if ((1 << j) & i) use[++usenum] = j + 1; dfs(1);
ret = 0;
for(int i = 1; i <= usenum; ++i)
ret += f[1][use[i]];
if ((usenum & 1) == mu) ans += ret;
else ans -= ret;
} printf("%lld\n", ans);
return 0;
}
【BZOJ 4455】【UOJ #185】【ZJOI 2016】小星星的更多相关文章
- [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...
- [ZJOI 2016] 小星星
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 653 Solved: 400[Submit][Status] ...
- [BZOJ 4573][ZJOI 2016]大森林
[LOJ 2092][BZOJ 4573][UOJ 195][ZJOI 2016]大森林 题意 给定一个树序列, 初始时所有树都只有一个点, 要求支持三种操作: 区间种树(在某个特定点上长出一个子结点 ...
- UOJ #185【ZJOI2016】 小星星
题目链接:小星星 首先有个暴力很好想.令\(f_{i,j,S}\)表示把\(i\)这棵子树对应到原图中的\(S\)集合,\(i\)号点对应到了\(j\)号点的方案数.这玩意儿复杂度是\(O(3^nn^ ...
- [LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字
[LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l, ...
- [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)
[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...
- 【BZOJ 4456】【UOJ #184】【ZJOI 2016】旅行者
http://www.lydsy.com/JudgeOnline/problem.php?id=4456 http://uoj.ac/problem/184 参考(抄)的晨爷的题解(代码) 对矩形进行 ...
- BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...
- 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 426 Solved: 255 Description 小Y是 ...
随机推荐
- Codeforces Round #286 Div.1 A Mr. Kitayuta, the Treasure Hunter --DP
题意:0~30000有30001个地方,每个地方有一个或多个金币,第一步走到了d,步长为d,以后走的步长可以是上次步长+1,-1或不变,走到某个地方可以收集那个地方的财富,现在问走出去(>300 ...
- POJ3666Making the Grade[DP 离散化 LIS相关]
Making the Grade Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6445 Accepted: 2994 ...
- XML(DOM解析)
//创建book.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <books> <b ...
- CSS3硬件加速需要注意的事项
webkit浏览器会把所有需要动画的元素放到复合层中渲染,另外以下两种情况也会使不需要动画的元素也放到复合层中渲染,这样会导致元素动画不流畅(原则是需要的动画才让它在复合层中渲染) 1,元素有一个包含 ...
- mysql线上一个定时备份脚本
数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...
- usb驱动开发15之设备生命线
总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_ ...
- 学习jQuery的on事件
开发asp.net mvc程序,多少是离不开jQuery客户程序.今天Insus.NET学习jQuery的一个on事件驱动. 先在网页视图放一个图片铵钮,用户可以使用mouse对这图片时行over,o ...
- quartz.net 项目无法加载的问题
最近尝试试用一下quartz.net 做任务调度用. 下载了源代码后打开解决方案发现项目无法加载.错误如下 未找到导入的项目“C:\Users\****\Desktop\Quartz.NET-2.1. ...
- Linux shell实战(ipcs工具)
#!/bin/bash -o $# -gt ] then echo "参数个数不正确!" exit - fi WHOAIM=`whoami` function release { ...
- eval的对于验证数学公式的用处
var a=10,b=20; var s=a+b+((a/b)+(a+(a-b)))+(11)/a; var r=eval(s); console.log(r); 只要不报错,说明公式正确, 报错公式 ...