4455: [Zjoi2016]小星星

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 653  Solved: 400
[Submit][Status][Discuss]

Description

小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品。她有n颗小星星,用m条彩色的细线串了起来,每条细
线连着两颗小星星。有一天她发现,她的饰品被破坏了,很多细线都被拆掉了。这个饰品只剩下了n?1条细线,但
通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树。小Y找到了这个饰品的设
计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星。如果现在饰品中两颗小星星有细线相连,
那么要求对应的小星星原来的图纸上也有细线相连。小Y想知道有多少种可能的对应方式。只有你告诉了她正确的
答案,她才会把小饰品做为礼物送给你呢。

Input

第一行包含个2正整数n,m,表示原来的饰品中小星星的个数和细线的条数。
接下来m行,每行包含2个正整数u,v,表示原来的饰品中小星星u和v通过细线连了起来。
这里的小星星从1开始标号。保证u≠v,且每对小星星之间最多只有一条细线相连。
接下来n-1行,每行包含个2正整数u,v,表示现在的饰品中小星星u和v通过细线连了起来。
保证这些小星星通过细线可以串在一起。
n<=17,m<=n*(n-1)/2

Output

输出共1行,包含一个整数表示可能的对应方式的数量。
如果不存在可行的对应方式则输出0。

Sample Input

4 3
1 2
1 3
1 4
4 1
4 2
4 3

Sample Output

6
直接每个点映射的话不太好算,那么我们可以先允许重复映射,最后再把重复映射的减去就是答案了。
也就是说,我们考虑 dp[i][j] 在限制S下的含义为: 树中的点只能映射原图上属于集合 S 的点 ,i点映射到j点 在以i 为根的子树中的方案。
设在限制S下的映射方案为ans[S] , 设只许映射到S且S集合中每个点都被至少映射一次的方案数为 calc[S] 。
那么显然的是 : ans[S] = Σ calc[T]  其中T是S的一个子集。
于是我们就可以从小到大容斥计算出calc[T],最后calc[2^n-1]就是答案了。
#include<bits/stdc++.h>
#define ll unsigned long long
#define maxn 140005
#define pb push_back
using namespace std;
vector<int> g[20];
int num,point[20];
int a[20][20],n,m,ci[30],S;
ll f[20][20],ans[maxn];
// ans[S]表示选点集合只能是S子集的方案数 void dp(int x,int fa){for(int i=1;i<=num;i++) f[x][i]=1;int to;for(int i=g[x].size()-1;i>=0;i--){to=g[x][i];if(to==fa) continue;dp(to,x);for(int j=1;j<=num;j++){ll now=0;for(int k=1;k<=num;k++) if(a[point[j]][point[k]]) now+=f[to][k];f[x][j]*=now;}}
}int main(){ci[0]=1;for(int i=1;i<=20;i++) ci[i]=ci[i-1]<<1;int uu,vv;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&uu,&vv);a[uu][vv]=a[vv][uu]=1;}for(int i=1;i<n;i++){scanf("%d%d",&uu,&vv);g[uu].pb(vv),g[vv].pb(uu);}for(S=1;S<ci[n];S++){num=0,memset(f,0,sizeof(f));for(int i=1;i<=n;i++) if(ci[i-1]&S) point[++num]=i;dp(1,1);for(int i=1;i<=num;i++) ans[S]+=f[1][i];}for(int i=1;i<ci[n];i++)for(int j=(i-1)&i;j;j=(j-1)&i) ans[i]-=ans[j];printf("%llu\n",ans[ci[n]-1]);return 0;
}

  

转载于:https://www.cnblogs.com/JYYHH/p/8526542.html

[ZJOI 2016] 小星星相关推荐

  1. [ZJOI 2016] bzoj 4455 小星星 - 容斥

    最后要求一一对应,很难限制,相当于限制某些点没有被对应一个也不成立.但是其反面某些点不能被对应可以随便做,对这个容斥即可.可能需要稍微卡一下常数? #include<iostream> # ...

  2. 使用MAKER进行注释: 如何避免多轮MAKER时的重复运算

    通常而言,我们会运行不只一轮的MAKER.如果参考组序列没有变化,那么有一些计算只需要做一次就行了,例如将EST, Repeat和Protein序列比对到参考基因组,得到它们对应的位置. 我们有三种方 ...

  3. 程序设计基础(C语言)课程主页-2016级

    时间很快,2016级的小鲜肉们已经在猜测老贺长什么样子了. 从在线作业到翻转课堂,几届的学生跟着我受了不少苦.话虽这么说,并不代表2016级的就要轻松了(老贺虚伪到底!).不过,苦孩子们,享受吧. 话 ...

  4. 2016计算机二级java_2016计算机二级JAVA练习题及答案

    2016计算机二级JAVA练习题及答案 21.下列选项中,不能输出100个整数的.是( ). A.for(int i=0;i<100;i++) System.out.println(i); B. ...

  5. 电大计算机应用,(2016年电大)电大全国计算机应用考试网考.doc

    (2016年电大)电大全国计算机应用考试网考 计算机基础知识一般认为,世界上第一台电子数字计算机诞生于-------.(1946年)计算机当前已应用于各种行业,各种领域,而计算机最早的设计是针对--- ...

  6. 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化

    2016 Multi-University Training Contest 2 A - Acperience 题意:给出w[],求S((w[i]-aB[i])^2)的最小值(B[i]为1或-1). ...

  7. 2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型

    2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型 2016-04-09  21:10:24     本文原创受版权保护,严禁转载. 请大家不要用于商业用途,支 ...

  8. 2016 - 1- 21 - RunLoop使用(2016-1-24修改一次)(2016 - 1 - 24 再次修改)

    一:常驻线程 :当需要一个线程一直处理一些耗时操作时,可以让它拥有一个RunLoop.具体代码如下:    1.通过给RunloopMode里加源来保证RunLoop不直接退出. 这里有个很重要得知识 ...

  9. 个人所得税计算器2016 by Jacksile

    个人所得税计算器2016 个人所得税计算器2016 税前薪资: 元 各项社会保险费: 元 起征点: 35004800元 应缴税款: 元 实发薪资: 元 个人所得税计算公式 应纳税额 = 应纳税所得额 ...

最新文章

  1. python基础常用语句-Python基本语句
  2. 神经网络:卷积神经网络
  3. nutch-site参数配置
  4. 【区块链】GO语言区块链项目——超级账本
  5. 数据结构与算法--举例分析法- 栈的压入弹出序列
  6. java 共享session_java session共享
  7. VisualAssistX中文注释提示错误 解决办法
  8. QT5之exe发布及dll打包
  9. Jenkins 官网文档翻译汇总
  10. 宿舍管理系统 php,基于php的大学生宿舍管理系统
  11. java mp4转码 h264_mp4格式的视频,编码方式mpeg4,转化为h264
  12. 传新版支持光追的 MikuMikuDance 正由另一人研发——MikuMikuDance 2 Project
  13. Android应用测试篇
  14. 深度学习机器学习面试问题准备
  15. 阿里巴巴离职DBA 35岁总结的职业生涯-职业规划
  16. python人机对战_【人机对战】用python打造经典井字游戏
  17. CentOS7-搭建Ftp服务
  18. ElasticSearch练习二:聚合语法学习(aggs、bucket、metric、hitogram、date hitogram)
  19. 电信公司Mahindra Comviva利用VoltActiveData来部署实时客户价值
  20. 服装长尾词有哪些?怎么查询服装的长尾词并导出挖掘结果?

热门文章

  1. 300+门美国一流大学的视频课程(涵盖各专业)
  2. 一个成功的人如何定义成功?
  3. 操作电脑有些什么小技巧或者注意事项?
  4. android studio : Invalid revision: 3.18.1-g262b901-dirty
  5. websocket autobahn webrtc
  6. 工程项目组织间激励作用机理研究︱项目组织管理
  7. win7安装wince6.0中遇到的问题 CDeviceSDKInstallShim Add/Remove failed. HR=0x8007005
  8. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
  9. 值得你关注的Android6.0上的重要变化(二)
  10. 人在洪荒,我改了亿点点天道小势(一)