题面

BZOJ
洛谷
Uoj

题解

题意说简单点就是给定一张nnn个点的图和一棵n" role="presentation">nnn个点的树,现在要让图和树之间的点一一对应,并且如果树上存在一条边,那么图上对应的点对之间也要存在边。

我们直接求解显然很麻烦,一一对应是一个很不好算的东西。
那么我们先要求并不需要一一对应,随意对应即可,最后再减掉不合法的方案,这样就可以用容斥来解决。
怎么容斥呢?无非是考虑没有一一对应的关系,那么我们先暴力枚举一下哪些点在图上可以和树上的点进行对应,其他的点不能够和树上的点进行匹配。
那么考虑dpdpdp计算方案数。
设f[i][j]f[i][j]f[i][j]表示当前以iii为根的子树(假装以1" role="presentation">111号点为根节点的有根树),并且iii在图上对应的点是j" role="presentation">jjj的方案数。
每次暴力选择一个和当前iii匹配的点,然后再暴力找到这个点在图中的所有儿子,并且用子树进行转移,这样dp" role="presentation">dpdpdp一次的复杂度是O(n×n×n)O(n×n×n)O(n\times n\times n),即树上每个点都要做一次,要暴力枚举和哪个点进行匹配,还需要暴力枚举儿子是哪个点,当然这样肯定不满。
再加上暴力枚举可以进行匹配的点集的枚举,
所以总的时间复杂度是O(n32n)O(n32n)O(n^32^n)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 20
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
struct Line{int v,next;}e1[MAX*MAX<<1],e2[MAX<<1];
int h1[MAX],h2[MAX];
int cnt1=1,cnt2=1;
int n,m,cnt,a[MAX];
inline void Add1(int u,int v){e1[cnt1]=(Line){v,h1[u]};h1[u]=cnt1++;}
inline void Add2(int u,int v){e2[cnt2]=(Line){v,h2[u]};h2[u]=cnt2++;}
ll f[MAX][MAX],ans=0,num;
void dfs(int u,int ff)
{for(int i=h2[u];i;i=e2[i].next)if(e2[i].v!=ff)dfs(e2[i].v,u);for(int i=1;i<=cnt;++i)//枚举当前点得到匹配点{f[u][a[i]]=1;for(int j=h2[u];j;j=e2[j].next)if(e2[j].v!=ff){num=0;for(int k=h1[a[i]];k;k=e1[k].next)num+=f[e2[j].v][e1[k].v];f[u][a[i]]*=num;if(!f[u][a[i]])break;}}
}
int main()
{n=read();m=read();for(int i=1,u,v;i<=m;++i)u=read(),v=read(),Add1(u,v),Add1(v,u);for(int i=2,u,v;i<=n;++i)u=read(),v=read(),Add2(u,v),Add2(v,u);for(int i=1;i<(1<<n);++i)//枚举可以进行匹配的点集{cnt=0;memset(f,0,sizeof(f));for(int j=0;j<n;++j)if(i&(1<<j))a[++cnt]=j+1;dfs(1,0);num=0;for(int j=1;j<=cnt;++j)num+=f[1][a[j]];if((n-cnt)&1)ans-=num;else ans+=num;}printf("%lld\n",ans);return 0;
}

【BZOJ4455】小星星(动态规划,容斥)相关推荐

  1. Leetcode 552.学生出勤记录‖ 动态规划+容斥

    题目链接:传送门 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤.迟到.到场).记录中只含下面三种字符: 'A':Absent,缺勤 'L':Late,迟到 'P':P ...

  2. 洛谷P3349:小星星(容斥dp)

    解析 先安利一波洛谷上我介绍如何用暴力日过去的博客 现在开始务正业 考虑把dp记录状态的一维s去掉 这样单次转移复杂度变成n3n^3n3 但是这样显然会算多啊! 因为一个编号可能会用很多次 考虑容斥 ...

  3. BZOJ4455 / UOJ185 小星星 —— 树形dp + 容斥

    题目链接:点我啊╭(╯^╰)╮ 题目大意: nnn 个点 mmm 条边的图     破坏后现在变成 nnn 个点的树     问这颗树每个点映射回原来的图的总方案数     映射即现在的两点存在边,原 ...

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

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

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

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

  6. bzoj 4455 [Zjoi2016]小星星 树形dp容斥

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 643  Solved: 391 [Submit][Statu ...

  7. 【LOJ#575】【LNR#2】不等关系(容斥,动态规划,分治FFT)

    [LOJ#575][LNR#2]不等关系(容斥,动态规划,分治FFT) 题面 LOJ 题解 一个暴力\(dp\),设\(f[i][j]\)表示考虑完了前\(i\)个位置,其中最后一个数在前面所有数中排 ...

  8. P3349-[ZJOI2016]小星星【树形dp,容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P3349 题目大意 nnn个点的一棵树,再给出一张图,树上每个点对应图上每个点后要求树上的边图上都有,求有多少种对应 ...

  9. [luogu4707]重返现世——min-max容斥拓展+动态规划

    题目大意: 给定\(n\)个物品和每个物品出现的概率,收集到至少\(k\)个物品的期望时间. \(k \leq 10\) 思路: 好题! 容斥计算第k大的期望,考虑计算第i大的数的贡献: \[ \be ...

最新文章

  1. 虚拟机下判断文件或目录是否存在
  2. 富士康c语言试卷答案,2015富士康笔试题目及答案
  3. splice方法_[7000字]JavaScript数组所有方法基础总结
  4. 进击吧! Blazor !第五期 安全
  5. iview 级联选择组件_使用 element-ui 级联插件遇到的坑
  6. dll 共享_系统DLL查看和检测工具ListDLLs
  7. Windows Phone 8.1 应用商店将于 12 月 16 日关闭
  8. 心情舒畅,升级到u10.04了
  9. 《生物信息学》——李霞;;生信概念
  10. opencv_python学习笔记十三
  11. 哈夫曼编码的理解(Huffman Coding)
  12. 2021年塔式起重机司机考试报名及塔式起重机司机免费试题
  13. 计算机电源风扇是吹风还是吸风,回答一些网友关于机箱内风道以及电源吸风还是抽风的问题...
  14. 数字孪生--thingjs
  15. apple/ios 获取udid
  16. [乡土民间故事_徐苟三传奇]第廿三回_吃蒸肉财主受捉弄
  17. Python开发:PyQT安装教程
  18. 高等数学强化6:二重积分
  19. vcruntime140_1.dll丢失的解决方法(仅一招解决)
  20. bluekitchen-stm32f1/csr8311移植笔记(4)-database driver

热门文章

  1. 富斯FS-T6 APM飞控四种飞行模式设置方法_MIX混控设置
  2. MATLAB案例-汽车雷达
  3. Qt单元测试工具 QTestlib
  4. 计算机低级格式化,电脑如何低格硬盘?电脑低格硬盘的方法
  5. 银行业务介绍--摘要
  6. 很多人问网站运营到什么时候才能够盈利?问题在这里
  7. 7位格雷码计算风向_基于单片机的风速风向检测系统设计
  8. 单片机节日彩灯实训报告_《单片机的原理与应用》节日彩灯的设计
  9. 【译】关于 Go 代码结构的思考
  10. 【航空发动机制造装配】商发制造:商用航空发动机总装智能制造集成创新与应用