题目大意:求有所有颜色的路径数。

题目分析:
参考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】相关推荐

  1. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  2. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  3. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  4. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  5. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  6. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  7. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  8. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  9. 树形dp ---- 2018年杭电多校第二场 H travel

    题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...

最新文章

  1. 漫画:什么是拜占庭将军问题
  2. 【数字信号处理】基于DFT的滤波系列2(含MATLAB代码)
  3. 工作147:外部that
  4. 5.3linux下C语言socket网络编程简例
  5. 5年之后,产品经理,没了?
  6. mac电脑查看sublime text安装位置和复制文件路径方法:
  7. java 异步 阻塞io_非阻塞IO与异步IO以及Java实现
  8. 【锁】redis加锁的几种方法
  9. a卡显存定位软件tserver_不止显卡!这些硬件因素也a影响着你的深度学习模型性能...
  10. Python游戏编程入门(一)——初识Pygame
  11. 续:FPGA设计基本原则及设计思想
  12. 改进left函数,截取varchar需要的字符串长度
  13. 微信小程序-小程序的宿主环境
  14. 内存屏障(Memory Barrier)(一)什么是写屏障?
  15. Mysql 获取成绩排序后的名次
  16. 我的世界Catserver开服
  17. Spring/Boot/Cloud系列知识(2)— — 代理模式
  18. 互联网晚报 | 5月19日 星期四 | 腾讯起诉vivo不正当竞争;市监局将立案调查妇炎洁问题广告;天津高考调整至6月12日举行...
  19. 以太坊合并60天,算通过大考验了吗?何时迈入星辰大海?
  20. Description: Web server failed to start. Port 8082 was already in use. Action: Identify and stop

热门文章

  1. (转)Fedora 17 安装完全指南
  2. android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
  3. html获取xml分页,JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
  4. hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
  5. 清除Console口和Telnet密码教程
  6. 设计稿生成代码与 Serverless 的前世今生与未来!
  7. 轻松构建基于 Serverless 架构的小程序
  8. mc有什么红石机器人_mc:作为一个mc萌新应该掌握哪些基本功?还需要知道些什么?...
  9. 微信公众号发多个消息php,微擎系统微信公众号关键字触发回复多条消息实现
  10. vue 访问 const 变量_var与let、const的区别