【题目】
lydsy
一幅nnn个点的树和一棵nnn个点的树,问有多少种点对应方式使得树上存在一条边则图上也存在一条边。
n≤17n\leq 17n≤17

【解题思路】
直接求一一对应并不好算,我们可以求任意对应再减去不合法。考虑没有一一对应的关系是,我们可以先暴力枚举以下哪些点可以和树上点对应,其他点则不能对应(相当于枚举一个映射)。

令fi,jf_{i,j}fi,j​表示iii子树对应图上点是jjj的方案数。

那么每次暴力枚举和当前点匹配的点,再找到这个点在图中所有儿子,用子树进行转移,一次复杂度O(n3)O(n^3)O(n3)。

因此总的复杂度就是O(n3⋅2n)O(n^3\cdot 2^n)O(n3⋅2n)

【参考代码】

#include<bits/stdc++.h>
using namespace std;typedef long long ll;
const int N=20;
int n,m,cnt,a[N];
ll ans,f[N][N];int read()
{int ret=0;char c=getchar();while(!isdigit(c)) c=getchar();while(isdigit(c)) ret=ret*10+(c^48),c=getchar();return ret;
}vector<int>G[N];
void add1(int u,int v){G[u].push_back(v);G[v].push_back(u);}int head[N],tot;
struct Tway{int v,nex;}e[N<<1];
void add2(int u,int v)
{e[++tot]=(Tway){v,head[u]};head[u]=tot;e[++tot]=(Tway){u,head[v]};head[v]=tot;
}void dfs(int x,int fa)
{for(int i=head[x];i;i=e[i].nex) if(e[i].v^fa) dfs(e[i].v,x);for(int i=1;i<=cnt;++i){f[x][a[i]]=1;for(int j=head[x];j;j=e[j].nex){int v=e[j].v;if(v==fa) continue;ll sum=0;for(int k=0;k<(int)G[a[i]].size();++k) sum+=f[v][G[a[i]][k]];f[x][a[i]]*=sum;if(!f[x][a[i]]) break;}}
}int main()
{#ifdef Durant_Leefreopen("BZOJ4455.in","r",stdin);freopen("BZOJ4455.out","w",stdout);
#endifn=read();m=read();for(int i=1;i<=m;++i) add1(read(),read());for(int i=1;i<n;++i) add2(read(),read());for(int s=1;s<(1<<n);++s){cnt=0;memset(f,0,sizeof(f));for(int i=0;i<n;++i) if(s&(1<<i)) a[++cnt]=i+1;dfs(1,0);ll sum=0;for(int i=1;i<=cnt;++i) sum+=f[1][a[i]];ans+=((n-cnt)&1?-1:1)*sum;}printf("%lld\n",ans);return 0;
}

【状压+容斥】BZOJ4455 [ZJOI2016] 小星星相关推荐

  1. 【容斥】[ZJOI2016] 小星星

    题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了n ...

  2. Wannafly挑战赛19:C. 多彩的树(状压+容斥)

    链接:https://www.nowcoder.com/acm/contest/131/C 来源:牛客网 题目描述 有一棵树包含 N 个节点,节点编号从 1 到 N.节点总共有 K 种颜色,颜色编号从 ...

  3. 2019.02.09 bzoj4455: [Zjoi2016]小星星(容斥原理+dp)

    传送门 题意简述:给一张图和一棵树(点数都为n≤17n \le17n≤17),问有多少种给树的标号方法方法使得图中去掉多余的边之后和树一模一样. 思路: 容斥好题啊. 考虑fi,jf_{i,j}fi, ...

  4. bzoj4455 [Zjoi2016]小星星

    题目描述: bz luogu 题解: 大力容斥+卡常. 考虑$dp[i][j]$表示点$i$子树选完且点$i$对应点$j$的方案数,很好转移. 然后大力容斥,此时容斥系数$-1^i$. 代码: #in ...

  5. [BZOJ4455][Zjoi2016]小星星

    [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 60 Solved: 52 [Submit][Status][Discuss ...

  6. bzoj4361 isn (dp+树状数组+容斥)

    我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn) ...

  7. jzoj6342-[NOIP2019模拟2019.9.7]Tiny Counting【树状数组,容斥】

    正题 题目大意 一个序列SSS,求有多少个互不相同的4元组(a,b,c,d)(a,b,c,d)(a,b,c,d)使得a<b且Sa<Sba<b且S_a<S_ba<b且Sa​ ...

  8. bzoj4455 loj2091 [Zjoi2016]小星星 容斥原理+树形DP(+状压DP?)

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4455 https://loj.ac/problem/2091 题解 很不错的一道题.(不过在当 ...

  9. [BZOJ4455][UOJ185][Zjoi2016]小星星(树形DP+容斥)

    将问题抽象化: 一个nnn个节点的树,和一个n" role="presentation" style="position: relative;"> ...

最新文章

  1. python官网怎么改中文-pycharm如何设置成中文
  2. python导入pandas出错_构建d时如何解决python-pandas导入错误
  3. 昆兰士科技大学计算机排名,昆士兰科技大学QS排名第几?2019年综合揭晓
  4. Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
  5. 原来历史人物的英文名竟然叫这些,太好笑了吧哈哈哈哈哈
  6. C++ 控制结构和函数(二) —— 函数I(Functions I)
  7. 哔哩哔哩公司swot分析_可口可乐公司2019年SWOT分析
  8. 低代码已至,传统开发方式是否还有必要?
  9. 计算机组成原理——如何理解计算机的运算速度以及运算速度的相关计算CPI/IPS/f/T
  10. python人脸识别毕业设计-毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计文章...
  11. 【转】一生必看的成功学书(转载)
  12. Android SIM卡识别加载流程
  13. python采集最新世界大学排名, 来看看你的母校上榜没~
  14. pythonurllib爬虫教学_Python学习教程:这里是Python爬虫的起点,抢占资源啦
  15. 教程 - IDEA创建Servlet以及使用Html网页请求Servlet(零基础上手)
  16. 搞联欢会,你知道什么是音乐吗?(二)
  17. 开车遇暴雨请戴墨镜!快转起,很多人会感激你的!
  18. 关于PyTorch Geometric的安装及问题解决记录
  19. 群晖docker签到京豆_解放你的时间,人人都可开启云签到生活!| 群晖篇
  20. UML中的九种建模图

热门文章

  1. S-232接口定义及连线
  2. 信创操作系统--麒麟Kylin桌面版(项目六 文档处理:输入法、WPS、文本编辑器)
  3. 我拍,我再拍,我拍拍拍
  4. Mac下载SQLServer
  5. 演示一下发电机的原理
  6. 白银时代房地产如何赚钱?——旅游地产怎样玩?
  7. Random Thoughts #2 罗列几个国内的VR类应用
  8. UE4特效萌新上手笔记- 从Houdini到Niagara的基本工作流程
  9. 计算机数据管理的三个阶段包括,计算机数据管理技术的发展包括三个阶段
  10. Windows平台下Glade+GTK开发环境的搭建