偷偷抄bestcoser上面hnust_zhaozhixuan的代码 = = 因为题解看不懂阿

#include <cstdio>
#include <cstring> typedef long long ll; using namespace std;
const int N = ;
const int MOD = 1e9 + ; int Scan() {
int x = , f = ; char ch = getchar();
while (ch < '' || ch > '') { if (ch == '-') f = -; ch = getchar(); }
while (ch >= '' && ch <= '') { x = (x << ) + (x << ) + ch - ''; ch = getchar(); }
return x * f;
} struct Edge {
int to, next;
} edge[N*];
int head[N], cntE;
void addedge(int u, int v) {
edge[cntE].to = v; edge[cntE].next = head[u]; head[u] = cntE++;
edge[cntE].to = u; edge[cntE].next = head[v]; head[v] = cntE++;
}
int a[N], n, m; int sz[N]; // sz[u] 记录 根为 u 点 有多少个异或值
int val[N][N]; // val[u][i] 记录 u 点 第 i 个的异或值都是什么
int dp[N][N]; // dp[u][i] 记录 根为 u 点 异或值为i的数量
int vis[N][N]; // vis[i] 记录 i 这个 异或值是否出现过
int tmp[N]; void add(int &a, int b) {
a = ((ll)a + b) % MOD;
} void dfs(int u, int fa) {
dp[u][ a[u] ] = ;
val[u][ sz[u]++ ] = a[u];
vis[u][ a[u] ] = true;
for (int i = head[u]; ~i; i = edge[i].next) {
int v = edge[i].to;
if (v == fa) continue;
dfs(v, u);
memset(tmp, , sizeof(int)*m);
for (int j = sz[u]-; j >= ; --j) {
for (int k = ; k < sz[v]; ++k) {
int a = val[u][j], b = val[v][k];
add(tmp[a^b], (ll)dp[u][a] * dp[v][b] % MOD);
if (!vis[u][a^b]) val[u][sz[u]++] = a^b, vis[u][a^b] = true;
}
}
for (int j = ; j < m; ++j) add(dp[u][j], tmp[j]);
}
} void init() {
memset(head, -, sizeof(int)*(n+));
memset(sz, , sizeof(int)*(n+));
for (int i = ; i <= n; ++i)
memset(dp[i], , sizeof(int)*m), memset(vis[i], , sizeof(int)*m);
cntE = ;
} int main()
{
//freopen("in.txt", "r", stdin);
int T = Scan();
while (T--) {
n = Scan(), m = Scan();
init();
for (int i = ; i <= n; ++i) a[i] = Scan();
for (int i = ; i < n; ++i) addedge(Scan(), Scan());
dfs(, ); for (int k = ; k < m; ++k) {
int ans = ;
for (int i = ; i <= n; ++i) add(ans, dp[i][k]);
printf("%d%c", ans, k==m-?'\n':' ');
} }
return ;
}

hdu5909-Tree Cutting(树形dp)的更多相关文章

  1. hdu 5909 Tree Cutting [树形DP fwt]

    hdu 5909 Tree Cutting 题意:一颗无根树,每个点有权值,连通子树的权值为异或和,求异或和为[0,m)的方案数 \(f[i][j]\)表示子树i中经过i的连通子树异或和为j的方案数 ...

  2. POJ 2378.Tree Cutting 树形dp 树的重心

    Tree Cutting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4834   Accepted: 2958 Desc ...

  3. [poj3107/poj2378]Godfather/Tree Cutting树形dp

    题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...

  4. poj 2378 Tree Cutting 树形dp

    After Farmer John realized that Bessie had installed a "tree-shaped" network among his N ( ...

  5. HDU - 5909 Tree Cutting (树形dp+FWT优化)

    题意:树上每个节点有权值,定义一棵树的权值为所有节点权值异或的值.求一棵树中,连通子树值为[0,m)的个数. 分析: 设\(dp[i][j]\)为根为i,值为j的子树的个数. 则\(dp[i][j\o ...

  6. HDU.5909.Tree Cutting(树形DP FWT/点分治)

    题目链接 \(Description\) 给定一棵树,每个点有权值,在\([0,m-1]\)之间.求异或和为\(0,1,...,m-1\)的非空连通块各有多少个. \(n\leq 1000,m\leq ...

  7. HDU5834 Magic boy Bi Luo with his excited tree(树形DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5834 Description Bi Luo is a magic boy, he also ...

  8. BZOJ-3227 红黑树(tree) 树形DP

    个人认为比较好的(高端)树形DP,也有可能是人傻 3227: [Sdoi2008]红黑树(tree) Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1 ...

  9. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)

    题目链接 D. Appleman and Tree time limit per test :2 seconds memory limit per test: 256 megabytes input ...

  10. 2017 Multi-University Training Contest - Team 1 1003&&HDU 6035 Colorful Tree【树形dp】

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

随机推荐

  1. Java API —— Date类

    1.Date类概述 类 Date 表示特定的瞬间,精确到毫秒.  2.构造方法 public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒). public Dat ...

  2. OpenCV在Android平台上的应用

    今年8月份, OpenCV 2.3.1发布了. 虽然从2.2开始, OpenCV就号称支持Android平台, 但真正能让OpenCV在Android上运行起来还是在2.3.1版本上. 在这个版本上, ...

  3. 特殊的css样式

    在一定范围大小变化的div .div { width:auto; height:auto; min-height:100px; min-width:100px; max-height:200px; m ...

  4. java开发之匿名内部类,接口的使用

    下面的例子是Java.JDK7学习笔记上的 打算开发多人联机程序,对每个联机客户端,都会建立Client对象封装相关信息 1.Client.java public class Client { pri ...

  5. JPA和Hibernate的区别

    JPA Java Persistence API,是Java EE 5的标准ORM接口,也是ejb3规范的一部分. Hibernate,当今很流行的ORM框架,是JPA的一个实现,但是其功能是JPA的 ...

  6. ASP.NET MVC 学习5、登陆页面改为SSO验证

    单点登录(SSO,single sign-on)是一个会话或用户身份验证过程,用户只需要登录一次就可以访问所有相互信任的应用系统,二次登录时无需重新输入用户名和密码.简化账号登录过程并保护账号和密码安 ...

  7. UVa 11105 (筛法) Semi-prime H-numbers

    题意: 你现在来到了一个所有的数都模4余1的世界,也就是除了这种数没有其他的数了. 然而素数的定义依然没变,如果一个数不能写成两个非1数字的乘积,则它是素数. 比如,在这里5就变成了最小的素数. 两个 ...

  8. bzoj1863: [Zjoi2006]trouble 皇帝的烦恼

    白书原题.l边界又设错啦.一般都是错这里吧.注意为什么这里不能是l=0.(只是为了判断第一个和最后一个 #include<cstdio> #include<cstring> # ...

  9. 四种途径将HTML5 web应用变成android应用

    作为下一代的网页语言,HTML5拥有很多让人期待已久的新特性.HTML5的优势之一在于能够实现跨平台游戏编码移植,现在已经有很多公司在移动 设备上使用HTML5技术.随着HTML5跨平台支持的不断增强 ...

  10. django - settings

    1.doc - https://docs.djangoproject.com/en/1.6/topics/settings/ from django.conf import settings # 加载 ...