题目大意:
T, T组测试数据
给你一个n有n个点,下标是从 1 开始的。这个是一棵树,然后下面是n-1条边,
每条边的信息是 s,e,w 代表 s-e的权值是w
然后是一个Q代表Q次询问。
每次询问是一个数字a,  代表 所有路径想异或后的值是 a的路径有多少条。
(注:  自己到自己的异或值是0,若a是0要考虑自己到自己)
 
题目分析:
从根节点开始进行一遍DFS求出所有点到 跟节点的异或值。也就得出来了根节点到达其他任何一个点的异或值。
比如 a 是跟节点到A的异或值, b是根节点到B的异或值
那么A->B的路径上的异或值就是  a^b.然后把所有的异或值桶排一下。
注意一点 a^b 的值是可能大于10W的,最大是260000多
 
 
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3fffffff
typedef long long LL;
const LL maxn = ;
const LL mod = 1e9+; bool vis[maxn];
int k, Head[maxn], n, Max = ;
LL num[maxn];
struct node
{
int e, next, w;
}Edge[maxn*]; void AddEdge(int s,int e,int w)
{
Edge[k].w = w;
Edge[k].e = e;
Edge[k].next = Head[s];
Head[s] = k;
k ++;
} void DFS(int root,int a)
{
vis[root] = true;
num[a] ++;
for(int i=Head[root]; i!=-; i=Edge[i].next)
{
int e = Edge[i].e;
if(vis[e] == true)
continue;
DFS(e, a^Edge[i].w);
}
} int main()
{ int Q, T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
k = ;
memset(Head, -, sizeof(Head));
memset(vis, false, sizeof(vis));
memset(num, , sizeof(num));
for(int i=; i<n-; i++)
{
int s, e, w;
scanf("%d %d %d",&s, &e, &w);
AddEdge(s, e, w);
AddEdge(e, s, w);
}
DFS(, ); scanf("%d", &Q);
while( Q --)
{
int a;
LL ans = ;
scanf("%d", &a);
if(a == )
ans += n;
for(int i=; i<=; i++)
{
if(a == )
ans += num[i]*(num[i]-)/;
else if(i < (a^i) && num[i] && num[a^i])
ans += num[i]*num[a^i];
}
printf("%lld\n", ans);
}
}
return ;
}

HDU 5416 CRB and Tree的更多相关文章

  1. Hdu 5416 CRB and Tree (bfs)

    题目链接: Hdu 5416 CRB and Tree 题目描述: 给一棵树有n个节点,树上的每条边都有一个权值.f(u,v)代表从u到v路径上所有边权的异或值,问满足f(u,v)==m的(u, v) ...

  2. HDU 5416 CRB and Tree(前缀思想+DFS)

    CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  3. HDU 5416——CRB and Tree——————【DFS搜树】

    CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  4. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  5. HDU 5416 CRB and Tree (2015多校第10场)

    欢迎參加--每周六晚的BestCoder(有米!) CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536 ...

  6. HDU 5416 CRB and Tree (技巧)

    题意:给一棵n个节点的树(无向边),有q个询问,每个询问有一个值s,问有多少点对(u,v)的xor和为s? 注意:(u,v)和(v,u)只算一次.而且u=v也是合法的. 思路:任意点对之间的路径肯定经 ...

  7. HDOJ 5416 CRB and Tree DFS

    CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  8. HDU 5416 CBR and tree

    #include<bits/stdc++.h> using namespace std; #define for(i,a,b) for(int i=a;i<=b;++i) //T,N ...

  9. 异或+构造 HDOJ 5416 CRB and Tree

    题目传送门 题意:给一棵树,问f (u, v) 意思是u到v的所有路径的边权值的异或和,问f (u, v) == s 的u,v有几对 异或+构造:首先计算f (1, u) 的值,那么f (u, v) ...

随机推荐

  1. FaceBook要在视频领域打败YouTube?

    据<纽约时报>报道,FaceBook正在探索一项新的策略来直接把音乐视频嵌入到用户的News Feeds中.目前,具有代表性的视频网站有YouTube和Vimeo,它们可以在社交网络上分享 ...

  2. Java基础知识强化之集合框架笔记14:List集合存储字符串并遍历

    1. List集合存储学生对象并遍历: 需求:存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)添加字符串对象到集合中 (4)遍历集合 2. 代码示例: package cn. ...

  3. MD5加密 Java源代码

    package lwp; /** * * @author 梁WP */ public class MD5_Encoding { // RFC1321中定义的标准4*4矩阵的常量定义. static f ...

  4. Android布局管理器(贞布局)

    贞布局有FrameLayout所代表,它直接继承了ViewGroup组建 贞布局为每个加入其中的组件创建一个空白区域(一帧),所以每个子组件占用一帧,这些贞都会根据gravity属性执行自动对齐 贞布 ...

  5. 玩转CSLA.NET小技巧系列一:跳转页面丢失session,如何解决

    很少写代码,最近在写代码被登录难倒了,这丫的一直在跟我较劲 每次登录完跳转到首页后还是未登录状态 if (ModelState.IsValid) { bool isSuccess = FI.Finan ...

  6. ios进行打包

    原文转载:http://blog.csdn.net/azhou_hui/article/details/9058677   公司刚搞了个299美刀的仅提供真机测试的企业账号,这个不需要添加设备ID,而 ...

  7. [转]一个备份MySQL数据库的简单Shell脚本

    本文翻译自 iSystemAdmin 的 <A Simple Shell Script to Backup MySQL Database> Shell脚本是我们写不同类型命令的一种脚本,这 ...

  8. Spring+AOP+Log4j 用注解的方式记录指定某个方法的日志

    一.spring aop execution表达式说明 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义 ...

  9. 寻找链表中倒数第K个结点的位置

    输入一个链表,输出该链表中倒数第K个结点. struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* FindKthToTail( ...

  10. Codeforces 474F - Ant colony

    注意到每个区间生存下来的蚂蚁的长度等于区间的gcd 于是可以先预处理出区间的gcd 然后二分查找就好了 预处理gcd我这里用的是倍增法 总的时间复杂度O(NlogN) /* Cf 271F 倍增求区间 ...