HDU5977 Garden of Eden 【FMT】【树形DP】
题目大意:求有所有颜色的路径数。
题目分析:
参考codeforces997C,先利用基的FMT的性质在$O(2^k)$做FMT,再利用只还原一位的特点在$O(2^k)$还原,不知道为什么网上都要点分治。
代码:
1 #include<bits/stdc++.h> 2 #define R register 3 using namespace std; 4 5 const int maxn = 50200; 6 7 int n,k,a[maxn],fa[maxn],cnt[maxn],head[maxn]; 8 struct edge{int to,nxt;}edges[maxn]; 9 long long f[maxn],pt[maxn]; 10 11 void read(){ 12 for(R int i=1;i<=n;i++) pt[i] = head[i] = 0; 13 for(R int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]--; 14 for(R int i=1;i<n;i++){ 15 int u,v; scanf("%d%d",&u,&v); 16 if(u > v) swap(u,v); 17 fa[v] = u; edges[i] = (edge){v,head[u]}; head[u] = i; 18 } 19 } 20 21 int dr; 22 void dfs(int now){ 23 long long tot = 0;long long dz = 0; 24 for(R int i=head[now];i;i=edges[i].nxt){ 25 int to = edges[i].to; 26 dfs(to); dz += tot*f[to]; tot += f[to]; 27 } 28 dz *= f[now]; dz += f[now]*tot; f[now] = (tot+1)*f[now]; 29 pt[now] += dr*dz; 30 } 31 32 void work(){ 33 for(R int i=0;i<(1<<k);i++){ 34 for(R int j=1;j<=n;j++) f[j] = ((1<<a[j])&i)?1:0; 35 dr = ((k-cnt[i])&1)?-1:1; 36 dfs(1); 37 } 38 long long ans = 0; 39 for(R int i=1;i<=n;i++) ans += pt[i]; 40 ans*=2; ans += n*(k==1); 41 printf("%lld\n",ans); 42 } 43 44 int main(){ 45 for(R int i=1;i<=50000;i++) cnt[i] = cnt[i>>1]+(i&1); 46 while(scanf("%d%d",&n,&k) == 2){ read(); work(); } 47 return 0; 48 }
转载于:https://www.cnblogs.com/Menhera/p/9514412.html
HDU5977 Garden of Eden 【FMT】【树形DP】相关推荐
- BNUOJ 52305 Around the World 树形dp
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...
- [树形dp] Jzoj P5233 概率博弈
Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- BZOJ 1040 ZJOI2008 骑士 树形DP
题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...
- POJ 3342 树形DP+Hash
这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...
- [NC15748]旅游 树形dp基础
菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...
- 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings
题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...
- 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)
题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...
- 树形dp ---- 2018年杭电多校第二场 H travel
题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...
最新文章
- 漫画:什么是拜占庭将军问题
- 【数字信号处理】基于DFT的滤波系列2(含MATLAB代码)
- 工作147:外部that
- 5.3linux下C语言socket网络编程简例
- 5年之后,产品经理,没了?
- mac电脑查看sublime text安装位置和复制文件路径方法:
- java 异步 阻塞io_非阻塞IO与异步IO以及Java实现
- 【锁】redis加锁的几种方法
- a卡显存定位软件tserver_不止显卡!这些硬件因素也a影响着你的深度学习模型性能...
- Python游戏编程入门(一)——初识Pygame
- 续:FPGA设计基本原则及设计思想
- 改进left函数,截取varchar需要的字符串长度
- 微信小程序-小程序的宿主环境
- 内存屏障(Memory Barrier)(一)什么是写屏障?
- Mysql 获取成绩排序后的名次
- 我的世界Catserver开服
- Spring/Boot/Cloud系列知识(2)— — 代理模式
- 互联网晚报 | 5月19日 星期四 | 腾讯起诉vivo不正当竞争;市监局将立案调查妇炎洁问题广告;天津高考调整至6月12日举行...
- 以太坊合并60天,算通过大考验了吗?何时迈入星辰大海?
- Description: Web server failed to start. Port 8082 was already in use. Action: Identify and stop
热门文章
- (转)Fedora 17 安装完全指南
- android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
- html获取xml分页,JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
- hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
- 清除Console口和Telnet密码教程
- 设计稿生成代码与 Serverless 的前世今生与未来!
- 轻松构建基于 Serverless 架构的小程序
- mc有什么红石机器人_mc:作为一个mc萌新应该掌握哪些基本功?还需要知道些什么?...
- 微信公众号发多个消息php,微擎系统微信公众号关键字触发回复多条消息实现
- vue 访问 const 变量_var与let、const的区别