解题报告:HDU_5909:Tree Cutting 树上FWT
来源:互联网 发布:分水岭分割算法流程图 编辑:程序博客网 时间:2024/05/16 09:41
题目链接
题意:
给定一棵树,树上每个结点有它的权值,现在问在树上选一些连通的点,使得这些点的权值的异或结果 等于0~m-1的时对应的方案数。
思路:
对每个子树统计选定根的方案数,那么答案为:
因为每个分支可以选也可以不选,那么在进行FWT之前对每个儿子进行dp[son][0]++的操作
代码:
#include<bits/stdc++.h>const int mod = 1e9+7;const int N = 1050;using namespace std;void FWT(long long a[],int l,int on){ for(int d=1;d<l;d<<=1){ for(int m=d<<1,i=0;i<l;i+=m){ for(int j=0;j<d;j++){ long long x = a[i+j],y=a[i+j+d]; if( (a[i+j]=x+y) >= mod ) a[i+j]-=mod; if( (a[i+j+d]=x-y)<0 ) a[i+j+d]+=mod; if(on<0){ long long ni = 500000004LL; a[i+j] = a[i+j] * ni % mod; a[i+j+d] = a[i+j+d] * ni % mod; } } } }}int n,m;int val[N];vector<int>G[N];long long dp[N][N];void dfs(int x,int fa=0){ dp[x][val[x]]++; for(int i=0;i<G[x].size();i++){ int t = G[x][i]; if(t!=fa){ FWT(dp[x],m,1); dfs(t,x); dp[t][0]++; FWT(dp[t],m,1); for(int i=0;i<m;i++){ dp[x][i] = dp[x][i] * dp[t][i] % mod; }FWT(dp[x],m,-1); } }for(int i=0;i<m;i++){ if((dp[0][i]+=dp[x][i])>=mod)dp[0][i]-=mod; } return ;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ scanf("%d",&val[i]); G[i].clear(); }for(int i=1,a,b;i<n;i++){ scanf("%d%d",&a,&b); G[a].emplace_back(b); G[b].emplace_back(a); }dfs(1); for(int i=0;i<m;i++){ printf("%I64d%c",dp[0][i],i<m-1?' ':'\n'); } }return 0;}
阅读全文
0 0
- 解题报告:HDU_5909:Tree Cutting 树上FWT
- 解题报告:HDU_6035 Colorful Tree 树上计数
- [树形DP FWT] HDU 5909 Tree Cutting
- [树形DP] [FWT] [HDU5909] Tree Cutting
- 解题报告:POJ1741 Tree 树上点分治(经典好题)
- 树上操作 解题报告
- Hdu 5909 Tree Cutting(fwt优化异或卷积)
- hdu5909 Tree Cutting - FWT 加速集合异或
- HDU 5909 Tree Cutting (树形dp+FWT)
- HDU 5909 Tree Cutting [树形dp+FWT]【动态规划+数学】
- uva10003 Cutting Sticks解题报告
- 【Jason's_ACM_解题报告】Cutting Sticks
- [51nod1773][A国的贸易][fwt]解题报告
- HDU 5909 Tree Cutting (点分治+树形DP|FWT+树形DP)
- Tree Recovery解题报告
- poj1741 Tree解题报告
- [bzoj3282]tree 解题报告
- [poj1741]tree 解题报告
- 论文阅读:CopyNet
- UVA 12034:Race (动态规划)
- canvas 对图片进行涂抹,涂抹区域保存图片存入本地
- js的Date和Math的对象
- 第四天总结
- 解题报告:HDU_5909:Tree Cutting 树上FWT
- 日志中不打印异常堆栈
- js 冒泡排序
- React Native移动开发实战-1-React Native的JSX解决方案
- 用模板实现顺序表和带头结点的双向循环链表
- 粘贴版
- 杭电1232畅通工程(最小生成树模板)
- Golang学习笔记 方法和接口
- javascript常用对象