hdu 5909 Tree Cutting [树形DP fwt]
hdu 5909 Tree Cutting
题意:一颗无根树,每个点有权值,连通子树的权值为异或和,求异或和为[0,m)的方案数
\(f[i][j]\)表示子树i中经过i的连通子树异或和为j的方案数
转移类似背包,可以用fwt加速
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = (1<<10) + 5, P = 1e9+7, inv2 = (P+1)/2;
inline int read() {
char c=getchar(); int x=0,f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
}
int n, m, val[N];
struct edge{int v, ne;} e[N<<1];
int cnt, h[N];
inline void ins(int u, int v) {
e[++cnt] = (edge){v, h[u]}; h[u] = cnt;
e[++cnt] = (edge){u, h[v]}; h[v] = cnt;
}
int f[N][N], ans[N];
void fwt(int *a, int n, int flag) {
for(int l=2; l<=n; l<<=1) {
int m = l>>1;
for(int *p = a; p != a+n; p += l)
for(int k=0; k<m; k++) {
int x = p[k], y = p[k+m];
if(flag == 1) p[k] = (x + y) %P, p[k+m] = (x - y + P) %P;
else p[k] = (ll) (x + y) * inv2 %P, p[k+m] = (ll) (x - y + P) * inv2 %P;
}
}
}
int t[N];
void dp(int u, int fa) {
int *a = f[u]; a[val[u]] = 1; //fwt(a, m, 1);
for(int i=h[u];i;i=e[i].ne) {
int v = e[i].v;
if(v == fa) continue;
dp(v, u); int *b = f[v];
for(int i=0; i<m; i++) t[i] = a[i];
fwt(t, m, 1); fwt(b, m, 1);
for(int i=0; i<m; i++) t[i] = (ll) t[i] * b[i] %P;
fwt(t, m, -1);
for(int i=0; i<m; i++) a[i] = (a[i] + t[i]) %P;
}
for(int i=0; i<m; i++) ans[i] = (ans[i] + a[i]) %P;
}
int main() {
freopen("in", "r", stdin);
int T = read();
while(T--) {
n = read(); m = read();
for(int i=1; i<=n; i++) val[i] = read();
cnt = 0; memset(h, 0, sizeof(h));
for(int i=1; i<n; i++) ins(read(), read());
memset(f, 0, sizeof(f)); memset(ans, 0, sizeof(ans));
dp(1, 0);
for(int i=0; i<m; i++) printf("%d%c", ans[i], i==m-1 ? '\n' : ' ');
}
}
hdu 5909 Tree Cutting [树形DP fwt]的更多相关文章
- HDU - 5909 Tree Cutting (树形dp+FWT优化)
题意:树上每个节点有权值,定义一棵树的权值为所有节点权值异或的值.求一棵树中,连通子树值为[0,m)的个数. 分析: 设\(dp[i][j]\)为根为i,值为j的子树的个数. 则\(dp[i][j\o ...
- HDU.5909.Tree Cutting(树形DP FWT/点分治)
题目链接 \(Description\) 给定一棵树,每个点有权值,在\([0,m-1]\)之间.求异或和为\(0,1,...,m-1\)的非空连通块各有多少个. \(n\leq 1000,m\leq ...
- hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...
- HDU 5909 Tree Cutting 动态规划 快速沃尔什变换
Tree Cutting 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5909 Description Byteasar has a tree T ...
- POJ 2378.Tree Cutting 树形dp 树的重心
Tree Cutting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4834 Accepted: 2958 Desc ...
- [poj3107/poj2378]Godfather/Tree Cutting树形dp
题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...
- HDU 5909 Tree Cutting(FWT+树形DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5909 [题目大意] 给出一棵树,其每棵连通子树的价值为其点权的xor和, 问有多少连通子树的价值为 ...
- poj 2378 Tree Cutting 树形dp
After Farmer John realized that Bessie had installed a "tree-shaped" network among his N ( ...
- hdu 5909 Tree Cutting —— 点分治
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治,每次的 rt 是必选的点: 考虑必须选根的一个连通块,可以DP,决策就是在每个子树中决定选不 ...
随机推荐
- The Blocks Problem(vector)
题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Tot ...
- TI-RTOS 之 GPIO中断(按键)
TI-RTOS 之 GPIO中断(按键) 前面已经用过LED, 定时器,这次来了解GPIO的中断是怎么用的,从CC1310+TI-RTOS的例程可以直接找到相应的例子程序,它的关键是在于要使能中断,也 ...
- rexray在CentOS上不能创建ceph rbd的docker volume问题定位
背景 我们通过docker的rexray插件来创建ceph rbd设备的docker volume,但总提示创建失败. # docker volume create --driver=rexray - ...
- html日历(3)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- radiobutton独特属性
radiobutton是通过name来分组的,也就是说,使用相同的名字的radio,它们才是单选的,如果名字不同的radio,是不具备这个效果的,这个是第一要点. 第二,针对不同的radio(name ...
- 编写自己的JavaScript方法库
下面列出了我在项目中经常使用到的一些方法,这些方法可以很方便的提高我们的工作效率,代码在GitHub上面,点击目录就可以跳转了,欢迎大家通过fork,改编和优化成自己的JavaScript方法库. 目 ...
- iframe及与页面之间的通信
获取iframe对象 iframe元素本身是位于父级页面中的,所以你可以像一个普通元素一样的使用和操作它 代表了iframe内容window对象是作为一个页面的属性加入到iframe中的, 为了让父级 ...
- 织梦dede列表调用图集的第一张图片大图原图地址(非缩略图)
dede(55) 我们在使用dede图片集的时候经常会碰到列表页或者内容页要调用一张图片而并非缩略图,那么碰到这样的问题怎么办呢?今天就给大家分享一个解决办法: 步骤一: 修改include/exte ...
- goDaddy SSL证书 Nginx配置全流程 (转)
好长时间没动过这玩意了,今天突然用到,忘的一干二净.在此做个笔记吧! 一.购买Godaddy SSL证书 1.打开Godaddy官网 http://www.godaddy.com/: 2.点击网站导航 ...
- oracle01
01-基本的查询语句 A:一些命令 sqlplus sys/sys@192.168.22.220:1521/orcl as sysdba; conn scott/123456@192.168.22.2 ...