bzoj 4455 [Zjoi2016]小星星 树形dp&容斥
4455: [Zjoi2016]小星星
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 643 Solved: 391
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2
1 3
1 4
4 1
4 2
4 3
Sample Output
HINT
Source
这道题目的画风十分新奇,题意我一开始都没怎么看懂,
题意:就是给你n个点的图和一棵树,然后将树重新标号,使得其在图中存在。
20分直接枚举全排列就可以了
40分的话dp+优化,考试的时候可以想想,类似那道暴力状态压缩转移那道题
原来的dp的话 f[i][j][sta]表是i这颗子树,i为j颜色,用sta填充,&&(j-1)那样去做,渐进3^n。
这样复杂度是 3^n*n^2
对于正解,因为n不是特别的大,而且在树上重新编号
就可以容斥,因为如果在树上任意编号的话,就是每次枚举编号集合,
这样的dp就可以转化为f[i][j]表示将i编号为j的方案数,这样的dp过程复杂度是O(n^3)
所以这样总的复杂度是(2^n*n^3)
#pragma GCC optimize(2)
#pragma G++ optimize(2)
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring> #define ll long long
#define N 22
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} ll ans;
int n,m,num;
int a[N],p[N][N];
ll f[N][N];
int cnt,hed[N],nxt[N*],rea[N*]; void add(int u,int v)
{
nxt[++cnt]=hed[u];
hed[u]=cnt;
rea[cnt]=v;
}
void cal(int u,int fa)
{
for (int i=hed[u];i!=-;i=nxt[i])
{
int v=rea[i];
if(v==fa)continue;
cal(v,u);
}
for (int i=;i<=num;i++)
{
f[u][i]=;
for (int j=hed[u];j!=-;j=nxt[j])
{
int v=rea[j];ll w=;
if(v==fa)continue;
for (int k=;k<=num;k++)
if(p[a[i]][a[k]])w+=f[v][k];
f[u][i]*=w;
}
}
}
void dfs(int x,int y,int sta)
{
if(x>n)
{
num=;
for (int i=;i<=n;i++)if(!((<<(i-))&sta))a[++num]=i;
cal(,);
ll res=;
for (int i=;i<=num;i++)
res+=f[][i];
ans+=y*res;
return;
}
dfs(x+,y,sta);
dfs(x+,-y,sta+(<<(x-)));
}
int main()
{
memset(hed,-,sizeof(hed));
n=read(),m=read();
for (int i=;i<=m;i++)
{
int x=read(),y=read();
p[x][y]=,p[y][x]=;
}
for (int i=;i<n;i++)
{
int x=read(),y=read();
add(x,y),add(y,x);
}
dfs(,,);
printf("%lld\n",ans);
}
bzoj 4455 [Zjoi2016]小星星 树形dp&容斥的更多相关文章
- 【题解】P3349 [ZJOI2016]小星星 - 子集dp - 容斥
P3349 [ZJOI2016]小星星 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 小 \(Y\) 是一个心灵手巧 ...
- uoj185 [ZJOI2016]小星星 【dp + 容斥】
题目链接 uoj185 题解 设\(f[i][j]\)表示\(i\)为根的子树,\(i\)号点对应图上\(j\)号点时的方案数 显然这样\(dp\)会使一些节点使用同一个节点,此时总的节点数就不满\( ...
- BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...
- BZOJ 4455: [Zjoi2016]小星星(容斥+树形dp)
传送门 解题思路 首先题目中有两个限制,第一个是两个集合直接必须一一映射,第二个是重新标号后,\(B\)中两点有边\(A\)中也必须有.发现限制\(2\)比较容易满足,考虑化简限制\(1\).令\(f ...
- BZOJ 4455: [Zjoi2016]小星星
Sol 容斥原理+树形DP. 这道题用的容斥思想非常妙啊!主要的思路就是让所有点与S集合中的点对应,可以重复对应,并且可以不用对应完全(意思是是S的子集也可以).这样他有未对应完全的,那就减去,从全都 ...
- BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)
BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...
- P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】
前言 话说在\(Loj\)下了个数据发现这题的名字叫\(fgo\) 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 \(n\)张卡的权值为\(1 ...
- HDU - 5977 Garden of Eden (树形dp+容斥)
题意:一棵树上有n(n<=50000)个结点,结点有k(k<=10)种颜色,问树上总共有多少条包含所有颜色的路径. 我最初的想法是树形状压dp,设dp[u][S]为以结点u为根的包含颜色集 ...
- BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)
这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...
随机推荐
- 内置函数系列之 map
map(映射函数)语法: map(函数,可迭代对象) 可以对可迭代对象中的每一个元素,分别执行函数里的操作 # 1.计算每个元素的平方 lst = [1,2,3,4,5] lst_new = map( ...
- TFS 2015服务端安装与客户端签入项目步骤
一.参考如下3篇文章搭建TFS2015环境 1.参考文章如下: TFS 2015(Visual Studio Team Foundation Server)的下载和安装http://www.cnblo ...
- manjaro安装teamviewer实现远程连接
不要安装库里面的这两个版本,安装后桌面快捷方式和命令行运行都正常显示窗口,但没有teamviewer ID和随机密码 12.x版本也不用下载尝试了 ➜ ~ teamviewer Init...Chec ...
- linux socketpair
相对于无名管道来说,socketpair也是使用在亲缘进程之间,不过它提供了能够全双工通信的通道 man socketpair: #include <sys/types.h> /* See ...
- 20145202马超 《Java程序设计》第二周学习总结
一.课后练习题目 1.D 并没有给number赋值导致出现错误. 2.A 10/3相当于10=3*3+1: 10/3=3. 3.D 4.D 很明显,byte类型的数据的话300就会出现溢出的情况. 5 ...
- FastJson 打Release 包解析失败
debug 的时候,fastJson 解析数据正常.但是打了release 的时候,解析的List 总是null. 找了半天,发现,是fastJson 是对泛型有问题. 解决办法: -keepattr ...
- 《Cracking the Coding Interview》——第13章:C和C++——题目1
2014-04-25 19:13 题目:用C++写一个读取文件倒数K行的方法. 解法:因为是要取倒数K行,所以我的思路是一行一行地读.过程中需要保存一个长度为K的链表,每次新读到一行都将表头节点移到表 ...
- 《Cracking the Coding Interview》——第7章:数学和概率论——题目7
2014-03-20 02:29 题目:将质因数只有3, 5, 7的正整数从小到大排列,找出其中第K个. 解法:用三个iterator指向3, 5, 7,每次将对应位置的数分别乘以3, 5, 7,取三 ...
- 【APUE】Chapter9 Process Relationships
这一章看的比较混乱,可能是因为例子少:再有就是,这一章就是一个铺垫的章节. 9.2 terminal logins 啥叫termnial? 我感觉书上的terminal指的更可能是一些物理设备(key ...
- python练习题及实现--文件处理、date日期
练习题作者:Vamei 出处:http://www.cnblogs.com/vamei http://www.cnblogs.com/vamei/archive/2012/07/19/2600135. ...