uoj #185. 【ZJOI2016】小星星
#185. 【ZJOI2016】小星星
小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品。她有 nn 颗小星星,用 mm 条彩色的细线串了起来,每条细线连着两颗小星星。有一天她发现,她的饰品被破坏了,很多细线都被拆掉了。这个饰品只剩下了 n−1n−1 条细线,但通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树。
小Y找到了这个饰品的设计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星。如果现在饰品中两颗小星星有细线相连,那么要求对应的小星星原来的图纸上也有细线相连。
小Y想知道有多少种可能的对应方式。只有你告诉了她正确的答案,她才会把小饰品做为礼物送给你呢。
输入格式
第一行包含个 22 正整数 n,mn,m ,表示原来的饰品中小星星的个数和细线的条数。
接下来 mm 行,每行包含 22 个正整数 u,vu,v,表示原来的饰品中小星星 uu 和 vv 通过细线连了起来。这里的小星星从 11 开始标号。保证 u≠vu≠v,且每对小星星之间最多只有一条细线相连。
接下来行 n−1n−1,每行包含个 22 正整数 u,vu,v,表示现在的饰品中小星星 uu 和 vv 通过细线连了起来。保证这些小星星通过细线可以串在一起。
输出格式
输出共 11 行,包含一个整数表示可能的对应方式的数量。如果不存在可行的对应方式则输出 00。
样例一
input
4 3
1 2
1 3
1 4
4 1
4 2
4 3
output
6
explanation
现在的饰品中第 44 颗小星星与原来的第 11 颗对应,现在的第 1,2,31,2,3 颗小星星可以与原来的第 2,3,42,3,4 颗小星星对应,所以有 66 种对应方式。
样例二
见样例数据下载。
限制与约定
各测试点满足以下约定:
测试点 | nn | mm | 约定 |
---|---|---|---|
1 | =10=10 | ≤n(n−1)2≤n(n−1)2 | 无 |
2 | |||
3 | =17=17 | 保证新的饰品中每颗小星星与至多两颗小星星相连 | |
4 | |||
5 | =14=14 | 无 | |
6 | |||
7 | =16=16 | 保证答案不超过 105105 | |
8 | 无 | ||
9 | =17=17 | ||
10 |
时间限制:1s1s
空间限制:512MB
/*
dp[i][j]表示以i为根的子树并且i对应原图的j的方案数
为避免同一个节点在树上映射多次,用容斥原理处理答案
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 30
using namespace std;
int n,m,cnt,bin[maxn],head[maxn],a[maxn],num;
long long dp[maxn][maxn];
bool mp[maxn][maxn];
struct node{int to,pre;}e[maxn*];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father){
long long tmp;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to!=father)dfs(to,now);
}
for(int i=;i<=cnt;i++){
dp[now][i]=;
for(int j=head[now];j;j=e[j].pre){
int to=e[j].to;
tmp=;
if(to==father)continue;
for(int k=;k<=cnt;k++)
if(mp[a[i]][a[k]])tmp+=dp[to][k];
dp[now][i]*=tmp;
if(!dp[now][i])break;
}
}
}
int main(){
scanf("%d%d",&n,&m);
int x,y;long long ans=,sum=;
bin[]=;for(int i=;i<=n;i++)bin[i]=bin[i-]<<;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
mp[x][y]=mp[y][x]=;
}
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
}
for(int i=;i<bin[n];i++){
sum=cnt=;
for(int j=;j<=n;j++)if(i&bin[j-])a[++cnt]=j;
dfs(,);
for(int j=;j<=cnt;j++)sum+=dp[][j];
if((cnt^n)&)ans-=sum;else ans+=sum;
}
cout<<ans;
return ;
}
uoj #185. 【ZJOI2016】小星星的更多相关文章
- ZJOI2016 小星星 题解
我一生之敌是状压 本文发表于 洛谷博客:https://www.luogu.com.cn/blog/LoveMC/solution-p3349 Cnblogs:https://www.cnblogs. ...
- BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...
- 4455[Zjoi2016]小星星 容斥+dp
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 527 Solved: 317[Submit][Status] ...
- [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)
这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...
- 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 426 Solved: 255 Description 小Y是 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- bzoj 4455 [Zjoi2016]小星星 树形dp&容斥
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 643 Solved: 391[Submit][Status] ...
- 【题解】P3349 [ZJOI2016]小星星 - 子集dp - 容斥
P3349 [ZJOI2016]小星星 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 小 \(Y\) 是一个心灵手巧 ...
- UOJ #185【ZJOI2016】 小星星
题目链接:小星星 首先有个暴力很好想.令\(f_{i,j,S}\)表示把\(i\)这棵子树对应到原图中的\(S\)集合,\(i\)号点对应到了\(j\)号点的方案数.这玩意儿复杂度是\(O(3^nn^ ...
随机推荐
- Python基础-网络编程request使用
import requests#get请求 url = "http://127.0.0.1:8000/login" data={"username":" ...
- 【Codeforces Round #466】E. Cashback DP+ST表
题意 给定$n$个数,将其划分成若干个连续的子序列,求最小价值,数组价值定义为,数组和减去$\lfloor \frac{k}{c} \rfloor$,$k$为数组长度,$c$为给定数 可以列得朴素方程 ...
- codeforces 515C C. Drazil and Factorial(水题,贪心)
题目链接: C. Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Json解析方式
http://blog.sina.com.cn/s/blog_628cc2b70101dydc.html
- 小程序wxss编译错误
控制台输入openVendor() ,清除里面的wcsc.exe,然后重启工具.
- BZOJ4974 大视野1708月赛 字符串大师
传送门 题目大意 给定一个字符串的每一个前缀的最短循环节长度,求符合要求的字典序最小的字符串. 题解 给定循环节最短长度就是给定了这个字符串$kmp$的$next$数组,即$X_i=i-next_i$ ...
- ACM学习历程—POJ3090 Visible Lattice Points(容斥原理 || 莫比乌斯)
Description A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal ...
- Oracle 12C 新特性之在线重命名、迁移活跃的数据文件
Oracle 数据库 12c 版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,可以使用 ALTER DATABASE MOVE DATAFILE 这样的 SQL 语句对数据文件进行在线重命名和移 ...
- Swift错误处理
相对于可选中运用值的存在与缺失来表达函数的成功与失败,错误处理可以推断失败的原因,并传播至程序的其他部分. throws关键词 一个函数可以通过在声明中添加throws关键词来抛出错误消息. func ...
- 使用Sublime编写HTML页面时发现,虽然已经设置好了UTF-8的编码格式,但却发现HTML页面的汉字仍然是乱码。
相信有些同学在使用Sublime编写HTML页面时发现,虽然已经设置好了UTF-8的编码格式,但却发现HTML页面的汉字仍然是乱码吧.我今天就遇到了这样的问题. 第一步:重新设置一下你的meta,设置 ...