一本通 高手训练 1781 死亡之树 状态压缩dp
LINK:死亡之树
关于去重 还是有讲究的。
题目求本质不同的 具有k个叶子节点的树的个数 不能上矩阵树。
点数很少容易想到装压dp 考虑如何刻画树的形状 发现一个维度做不了 所以。
设状态 f[i][j]表示 点的集合为i叶子集合的点为j的方案树。
这样我们就能知道这棵树大致的样子 空间 为\(2^{2n}\)
当然 如果使用三进制状压 空间复杂度还会进一步降到3^n 不过这道题没有卡空间。
考虑转移 可以枚举点 也可以枚举边。
先考虑枚举边 会出现重复的情况 如先加这条边再加那条边 两条边可以交换。
考虑强制按顺序的话 需要记上次加入的边是什么。时间上过不了。
考虑最后除以(n-1)! 这样也不行因为 这样的话 每次考虑加入边的时候点的状态的刻画存在问题。
考虑枚举点 此时实质还是在加边 还是有重复的。
甚至在某个时刻都有可能出现顺序带来方案数不同的问题。
还是考虑点的有序性 考虑 从一个状态到达另外一个状态转移的唯一性。
可以发现在枚举决策的时候 只有当前决策大于叶子节点的最大的那个再进行转移 此时这样就保证了每一种树都是以唯一的方式构造出来的。
证明 倒着想 考虑当前的一棵树的上一个状态 一定是当前状态减掉最大编号的叶子节点得到的 如果不是 那么上个状态是不能转移到当前状态的。
归纳一下可以得证。
const ll MAXN=11;
ll n,maxx,m,K;
ll sum[1<<MAXN];
ll f[1<<MAXN][1<<MAXN];
ll a[MAXN][MAXN];
signed main()
{
freopen("dead.in","r",stdin);
freopen("dead.out","w",stdout);
get(n);get(m);get(K);
rep(1,m,i)
{
ll get(x);ll get(y);
a[x][y]=a[y][x]=1;
}
rep(2,n,i)if(a[1][i])f[1|(1<<(i-1))][1|(1<<(i-1))]=1;
maxx=(1<<n)-1;
rep(1,maxx,i)sum[i]=sum[i>>1]+(i&1);
rep(1,maxx,i)
{
for(ll j=i;j;j=i&(j-1))
{
if(!f[i][j])continue;
for(ll k=1;k<=n;++k)
{
if(!(i&(1<<(k-1))))continue;
ll w=j;
if(j&((1<<(k-1))))w=w^(1<<(k-1));
for(ll cc=1;cc<=n;++cc)
{
if((1<<(cc-1))<w)continue;
if(i&(1<<(cc-1)))continue;
if(!a[k][cc])continue;
if(sum[w|(1<<(cc-1))]>K)continue;
f[i|(1<<(cc-1))][w|(1<<(cc-1))]+=f[i][j];
}
}
}
}
ll ans=0;
for(ll j=maxx;j;j=maxx&(j-1))if(sum[j]==K)ans+=f[maxx][j];
putl(ans);return 0;
}
一本通 高手训练 1781 死亡之树 状态压缩dp的更多相关文章
- HDU 4085 Peach Blossom Spring 斯坦纳树 状态压缩DP+SPFA
状态压缩dp+spfa解斯坦纳树 枚举子树的形态 dp[i][j] = min(dp[i][j], dp[i][k]+dp[i][l]) 当中k和l是对j的一个划分 依照边进行松弛 dp[i][j] ...
- POJ 3691 (AC自动机+状态压缩DP)
题目链接: http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段.问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA. 解题 ...
- [动态规划]状态压缩DP小结
1.小技巧 枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S) 枚举包含S的集合:for(int i = S; i < (1<<n); ...
- Codeforces C. A Simple Task(状态压缩dp)
题目描述: A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
随机推荐
- Uni-app页面路由小问题
从地址列表页跳转到地址编辑页之后,编辑完成,回到地址列表页,应该使用uni.redirectTo(),不能使用uni.navigateBack(),因为后者是回到上一个页面,地址列表页的并没有重新加载 ...
- arm64-v8a 静态成员模板 undefined reference to
谷歌发布新包需要64位的so Application.mk 中 APP_ABI := armeabi armeabi-v7a x86 x86_64 arm64-v8a 添加了 arm64-v8a 和 ...
- C#foreach原理
本文主要记录我在学习C#中foreach遍历原理的心得体会. 对集合中的要素进行遍历是所有编码中经常涉及到的操作,因此大部分编程语言都把此过程写进了语法中,比如C#中的foreach.经常会看到下面的 ...
- 还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 软件设计中,有好几种图需要画,比如流程图.类图.组件图等,我知道大部分 ...
- requests接口自动化4-登录后才能访问的get请求,需共享cookie
登录后才能访问的get请求,需共享cookie fiddler里请求响应结果: 代码: import requests import json #form表单形式的post请求,用data传参,Con ...
- PowerShell创建参考窗口
背景 平常我们经常遇到这样一个问题,在使用一个窗口工作时常常需要参考其他窗口的文字或图片,此时就需要频繁切换窗口:或者是看视频时需要参考前面进度的画面:或者是阅读或写文档时需要参考其他位置的文字,这时 ...
- 基于python的自动化测试框架搭建
滴~ 今日打卡! 好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...
- 利用服务器+jsDelivr+GitHub搭建咱的免费图床
前言 有人就问了你这个标题写错了?不应该是PicGo+jsDelivr+GitHub搭建咱的免费图床吗? 2333,是一个上传程序啊,不系写错了. 程序介绍 目前程序已实现两种模式上传到GitHub或 ...
- swfupload控件文件上传大小限制设置
swfupload控件,是我在开发过程中用到的上传文件的控件,非常实用和方便.但最近碰到一些问题,解决之后进行一下整理. 因为用户上传文件的大小限制增加,导致原本上传控件时,文件的大小需要进行调整和限 ...
- Shell基本语法---if语句
if语句 格式 #单分支 if [ 条件判断 ]; then 执行动作 fi if [ 条件判断 ]; then 执行动作 else 执行动作 fi #多分支 if [条件判断]; then 执行动作 ...