CQNKP4070【ZJOI2016】小星星
问题描述
小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品。她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星。有一天她发现,她的饰品被破坏了,很多细线都被拆掉了。这个饰品只剩下了n-1条细线,但通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树。小Y找到了这个饰品的设计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星。如果现在饰品中两颗小星星有细线相连,那么要求对应的小星星原来的图纸上也有细线相连。小Y想知道有多少种可能的对应方式。只有你告诉了她正确的答案,她才会把小饰品做为礼物送给你呢。
输入格式
第一行包含个2正整数n,m,表示原来的饰品中小星星的个数和细线的条数。
接下来m行,每行包含2个正整数u,v,表示原来的饰品中小星星u和v通过细线连了起来。
这里的小星星从1开始标号。保证u≠v,且每对小星星之间最多只有一条细线相连。
接下来n-1行,每行包含个2正整数u,v,表示现在的饰品中小星星u和v通过细线连了起来。
保证这些小星星通过细线可以串在一起。
输出格式
输出共1行,包含一个整数表示可能的对应方式的数量。
如果不存在可行的对应方式则输出0。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define low(x) ((x)&(-(x)))
#define LL long long
#define eps 1e-9
using namespace std;#define int int
inline int Max(int a,int b) {return a>b?a:b;}
inline int Min(int a,int b) {return a<b?a:b;}
inline int Abs(int a) {return a>0?a:-a;}
inline int Sqr(int a) {return a*a;}
#undef int#define MAXN 20struct edge{int to,next;
}e[MAXN*2];int head[MAXN],cnt;
inline void Insert(int a,int b) {e[++cnt].next=head[a];head[a]=cnt;e[cnt].to=b;e[++cnt].next=head[b];head[b]=cnt;e[cnt].to=a;
}int n,m,tot,s[MAXN];
int mp[MAXN][MAXN];LL dp[MAXN][MAXN],ans;void Tree_dp(int v,int fa) {for(int i=head[v];i;i=e[i].next) if(e[i].to!=fa) Tree_dp(e[i].to,v);for(int i=1;i<=tot;i++) {dp[v][s[i]]=1;for(int j=head[v];j;j=e[j].next) {if(e[j].to==fa) continue;LL tmp=0;for(int k=1;k<=tot;k++) if(mp[s[i]][s[k]]) tmp+=dp[e[j].to][s[k]];dp[v][s[i]]*=tmp;if(!tmp) break;}}
}int main() {scanf("%d%d",&n,&m);for(int a,b,i=1;i<=m;i++) {scanf("%d%d",&a,&b);mp[a][b]=mp[b][a]=1;}for(int a,b,i=1;i<n;i++) {scanf("%d%d",&a,&b);Insert(a,b);}int ful=1<<n;for(int i=1;i<ful;i++) {tot=0;for(int j=0;j<n;j++) if(i>>j&1) s[++tot]=j+1;Tree_dp(1,0);for(int j=1;j<=tot;j++) ans+=((n-tot)&1?-1:1)*dp[1][s[j]];}cout<<ans<<endl;return 0;
}
CQNKP4070【ZJOI2016】小星星相关推荐
- [ZJOI2016]小星星
[ZJOI2016]小星星 题目描述 luogu题面 给定一个n个点的树和n个点m条边的无向图,求将树嵌入图的方案数. 其中 n≤17,m≤n∗(n−1)2n \leq 17,m \leq \frac ...
- bzoj 4455 [Zjoi2016]小星星 树形dp容斥
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 643 Solved: 391 [Submit][Statu ...
- bzoj4455UOJ185 [Zjoi2016]小星星(树形DP+容斥原理)
bzoj4455&UOJ185 [Zjoi2016]小星星 原题地址: http://www.lydsy.com/JudgeOnline/problem.php?id=4455 http:// ...
- 4455: [Zjoi2016]小星星
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 246 Solved: 161 [Submit][Statu ...
- [BZOJ4455][Zjoi2016]小星星
[Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 60 Solved: 52 [Submit][Status][Discuss ...
- 【容斥】[ZJOI2016] 小星星
题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了n ...
- 2019.02.09 bzoj4455: [Zjoi2016]小星星(容斥原理+dp)
传送门 题意简述:给一张图和一棵树(点数都为n≤17n \le17n≤17),问有多少种给树的标号方法方法使得图中去掉多余的边之后和树一模一样. 思路: 容斥好题啊. 考虑fi,jf_{i,j}fi, ...
- 【UOJ】【BZOJ】 [Zjoi2016]小星星
题目链接: http://uoj.ac/problem/185 http://www.lydsy.com/JudgeOnline/problem.php?id=4455 考虑枚举原图中我选择哪一些点, ...
- bzoj4455 loj2091 [Zjoi2016]小星星 容斥原理+树形DP(+状压DP?)
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4455 https://loj.ac/problem/2091 题解 很不错的一道题.(不过在当 ...
- bzoj4455 [Zjoi2016]小星星
题目描述: bz luogu 题解: 大力容斥+卡常. 考虑$dp[i][j]$表示点$i$子树选完且点$i$对应点$j$的方案数,很好转移. 然后大力容斥,此时容斥系数$-1^i$. 代码: #in ...
最新文章
- 学习方法之01高效学习方程式,你的学习到底是哪里出了问题
- Embedding在腾讯应用宝的推荐实践
- 纽约佩斯大学孔子学院:中国故事
- hdu 5139 数据的离线处理
- 人生---新---起点……
- Redis的安装(windows)
- 内存池算法 linux,内存池自动释放 - 梦想游戏 - OSCHINA - 中文开源技术交流社区...
- Visual Studio Code编辑器的实用插件和工作中实用的技巧
- 原生JS实现HTML文件上传,简单实现js上传文件功能
- redis过期策略及持久化机制
- 段码液晶屏实现原理和需要注意的事项
- 但愿人长久,千里共婵娟---众智云
- 计算机网络 - NB-IOT/LoRa/Zigbee 无线组网方案对比
- 阿里实名认证Java版(详细教程)
- 游戏日常运营数据:DAU分解及留存
- 使用html制作个人主页
- Qt实现Qchart的打印和打印预览的几种方法
- Java SE Development Kit 9.0.4 的下载安装及配置
- TokenGazer《一问到底》| 第45期 :研究员 VS Reserve
- 第一篇 javase时钟表