Sol

容斥原理+树形DP.

这道题用的容斥思想非常妙啊!主要的思路就是让所有点与S集合中的点对应,可以重复对应,并且可以不用对应完全(意思是是S的子集也可以).这样他有未对应完全的,那就减去,从全都一一对应到少对应几个,减号套减号,就形成了容斥关系,看S中元素个数与n的关系,如果相差奇数个,那就减去,相差偶数个,那就加上.用树形DP转移,枚举当前节点选哪一个,再枚举子节点选哪一个,如果两个有连线就统计到答案里.因为每个节点只进入一次,转移是 \(n^2\) 的,枚举子集是 \(2^n\) 总复杂度就是 \(O(2^nn^3)\)

Code

/**************************************************************
Problem: 4455
User: BeiYu
Language: C++
Result: Accepted
Time:6200 ms
Memory:1296 kb
****************************************************************/ #include<cstdio>
#include<vector>
#include<iostream>
using namespace std; const int N = 18;
typedef long long LL; int n,m,S;LL ans;
LL f[N][N];
int q[N],t,pow2[N];
bool b[N][N];
vector<int> g[N]; void DP(int x,int fa=0){
for(int i=1;i<=t;i++) f[x][q[i]]=1;
for(int i=0,v;i<g[x].size();i++) if((v=g[x][i])!=fa){
DP(v,x);
for(int j=1;j<=t;j++){
LL tmp=0;
for(int k=1;k<=t;k++) if(b[q[j]][q[k]]) tmp+=f[v][q[k]];
f[x][q[j]]*=tmp;
}
}
}
void calc(const int &S){ t=0;for(int i=1;i<=n;i++) if(S&pow2[i-1]) q[++t]=i; }
inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
int main(){
n=in(),m=in();pow2[0]=1;for(int i=1;i<18;i++) pow2[i]=pow2[i-1]<<1;
for(int i=1,u,v;i<=m;i++) u=in(),v=in(),b[u][v]=b[v][u]=1;
for(int i=1,u,v;i<n;i++) u=in(),v=in(),g[u].push_back(v),g[v].push_back(u);
for(S=1;S<(1<<n);S++){
calc(S);DP(1,0);LL tmp=0;
for(int i=1;i<=t;i++) tmp+=f[1][q[i]];
if((n-t)&1) ans-=tmp;else ans+=tmp;
}return printf("%lld\n",ans),0;
}

  

BZOJ 4455: [Zjoi2016]小星星的更多相关文章

  1. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]

    4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...

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

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

  3. BZOJ 4455: [Zjoi2016]小星星(容斥+树形dp)

    传送门 解题思路 首先题目中有两个限制,第一个是两个集合直接必须一一映射,第二个是重新标号后,\(B\)中两点有边\(A\)中也必须有.发现限制\(2\)比较容易满足,考虑化简限制\(1\).令\(f ...

  4. 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 426  Solved: 255 Description 小Y是 ...

  5. 4455[Zjoi2016]小星星 容斥+dp

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 527  Solved: 317[Submit][Status] ...

  6. 【UOJ】【BZOJ】 [Zjoi2016]小星星

    题目链接: http://uoj.ac/problem/185 http://www.lydsy.com/JudgeOnline/problem.php?id=4455 考虑枚举原图中我选择哪一些点, ...

  7. 4455: [Zjoi2016]小星星|状压DP|容斥原理

    OrzSDOIR1ak的晨神 能够考虑状压DP枚举子集,求出仅仅保证连通性不保证一一相应的状态下的方案数,然后容斥一下就是终于的答案 #include<algorithm> #includ ...

  8. 【bzoj 4455】小星星(树型DP+容斥原理+dfs建树和计算的2种方式)

    题意:给一个n个点的图和一个n个点的树,求图和树上的点一一对应的方案数.(N<=17) 解法:1.在树的结构上进行tree DP,f[i][j]表示树上点 i 对应图上点 j 时,这个点所在子树 ...

  9. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

随机推荐

  1. OC面向对象特性:封装

    概念性知识  1.c语言是面向过程编程:分析解决问题的步骤,实现函数,依次调用  2.oc语言是面向对象编程:分析问题的组成的对象,协调对象间的联系和通信,解决问题  3.#include和#impo ...

  2. yum配置文件详解

    yum是什么: Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包,自动解决包的倚赖性问题,它能便于管理大量系统的更新问题. yum特点:可以同时配置多 ...

  3. Lua 之os库

    标准os库 os.rename(oldname, newname) 文件重命名: os.remove(filename) 删除一个文件 os.execute(cmd) os.execute可运行一条系 ...

  4. Linq_Lambda GroupBy使用笔记

    今天看MVC遇到了GroupBY的Lambda表达式..有兴趣详细的看下去..得此笔记..记录之... 不罗嗦..上代码... //得到List<GroupEmail>对象 数据源 var ...

  5. MYSQL的锁介绍,以及死锁发生情况-带例子

    mysql锁能在并发情况下的mysql进行更好的优化 MySQL有三种锁的级别:页级.表级.行级,这3种锁的特性可大致归纳如下: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高 ...

  6. 如何提高MySQL Limit查询的性能

    MYSQL的优化是非常重要的.其他最常用也最需要优化的就是limit.mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select ...

  7. CF467D Fedor and Essay 建图DFS

      Codeforces Round #267 (Div. 2) CF#267D D - Fedor and Essay D. Fedor and Essay time limit per test ...

  8. PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码

    做一个内网根据MAC地址自动登录的应用,在WINDOW 2003可以正常使用,函数如下   复制代码 代码如下: function ce_getmac() { if(PHP_OS == 'WINNT' ...

  9. 记录在xx公司被考核的15天及自己的感想

    在大学有两件事让我很遗憾. 第一:在2013年7月我和自己的前任女朋友分手,这是两年前的事了,我们谈了七个月. 第二:在2015年4月我被xx公司淘汰了,正如我的前任女朋友是我遇到的最好女孩,这家公司 ...

  10. VBA 实现批量excel文件复制

    对于每天要将文件复制到其他多个路径 1 在test文件下新建3个子文件夹 test1,test2,test3 2 在test1下新建li01.xlsx,li02.xlsx,hua01.xlsx,hua ...