hdu 5416 CRB and Tree(异或运算)

hdu5416 树形dp 树上路径异或和 D - CRB and Tree Time Limit:4000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5416 Appoint description:  System Crawler  (Aug 31, 2016 7:27:46 PM 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5416

解题思路:

官方题解:

We can easily proved that f(u, v)\f(u,v) =\ f(1, u) f(1,u) ^f(1, v)f(1,v).

Traversing tree from vertex 1 as the root, all values f(1, u)f(1,u) can be calculated in linear time. These values must be put into buckets.

For each query ss, f(u, v)\ =\ s\Leftrightarrow f(1, v)\ =\ f(1, u)f(u,v) = s⇔f(1,v) = f(1,u)^ ss indicates that for each vertex uu, number of vertices vv satisfies that f(u, v)\ =\ sf(u,v) = s can be calculated from the buckets in constant time. (Note that some exceptions must be processed such as s\ =\ 0s = 0 or u\ =\ vu = v)

Time complexity:O(Q\cdot N)O(Q⋅N)

设路径{u,v}的边权异或结果为 f(u,v)

设lca 为u v的最近公共祖先

首先得到一个结论,f(u,v) =f(lca, u) ^ f(lca, v)

因为f(lca, root) ^ f(lca, root) == 0

所以 f(u,v) =( f(lca,u)^f(lca,root) ) ^ ( f(lca, v) ^ f(lca, root)) = f(root,u) ^ f(root, v)

然后用一个数组存下从根到任意一个点的路径异或值。

最后对每个询问,枚举以某个点为端点的路径个数即可。

因为这样算出来的path(u,v)是计算了2遍的,所以结果要/2

注意一下0的情况即可。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

typedef long long ll;
const int N = 100005;
const int maxn = N<<1;
struct node{
    int x,w;
};
vector<node> edge[N];
int vis[N];
ll cnt[maxn];

void dfs(int u,int val){
    vis[u] = 1;
    if(u^1)
        cnt[val]++;
    int l = edge[u].size();
    for(int i = 0; i < l; i++){
        node tmp = edge[u][i];
        if(!vis[tmp.x]){
            dfs(tmp.x,tmp.w^val);
        }
    }
}

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,q;
        scanf("%d",&n);
        for(int i = 1; i <= n; i++)
            edge[i].clear();
        int u,v,w;
        for(int i = 1; i < n; i++){
            scanf("%d%d%d",&u,&v,&w);
            edge[u].push_back(node{v,w});
            edge[v].push_back(node{u,w});
        }
        memset(vis,0,sizeof(vis));
        memset(cnt,0,sizeof(cnt));
        dfs(1,0);

        scanf("%d",&q);
        while(q--){
            scanf("%d",&w);
            ll ans = 0;
            if(w == 0){
                ans += n+cnt[0];
                for(int i = 0; i < maxn; i++)
                    ans += cnt[i] * (cnt[i] - 1) / 2;
            }
            else{
                for(int i = 0; i < maxn; i++)
                    ans += cnt[i] * (cnt[i ^ w]);
                ans >>= 1;
                ans += cnt[w];
            }
            printf("%lld\n",ans);
        }
    }
    return 0;
}


zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三 阅读详情

相关推荐

SAP SD跨公司销售IDOC自动记账配置实战指南

本文详细介绍了SAP SD模块中跨公司销售IDOC自动记账的配置实战指南。通过IDOC技术实现集团企业间交易的自动化处理,显著提升财务效率和准确性。文章涵盖前置配置、RFC连接、合作伙伴参数设置及财务科目分配等关键步骤,并提供了常见错误排查和性能优化建议,帮助用户快速掌握这一高效业务流程。

weixin_29284885的博客 769

HDU 5416(思路题目)

题意: 给定一棵树,要求统计所有的F(U,V),使得路径上的权值异或之和为一个查询值, 魅族数据查询数至多为10 解析: 从 f[u->v] = f(u->1 )^(1->v);这样先预处理f(1->i)然后统计即可,注意统计的时候 cnt数组要开到 (1 因为路径权值不超过1e5,至多为17位二进制数。异或最大值不超过(1 #include #include #include #inc

playwfun的专栏 434

告别WSL:Ollama Windows原生部署与GPU加速实战

本文详细介绍了Ollama在Windows系统上的原生部署与GPU加速实战指南。告别WSL,通过官方原生应用直接调用NVIDIA和AMD显卡,实现更高效的本地大模型运行。文章涵盖系统准备、三步安装、模型拉取运行、GPU性能优化及高级配置,为Windows AI开发者提供一站式解决方案。

prometheus9mon的博客 532

HDU 5416 异或运算性质 思维

HDU 5416 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5416 题意: 给一棵树,每条边有权值。问f(u,v) = s的(u,v)对数有多少对。u。 思路: 赛后过。 刚开始以为是什么不知道的算法,上网看标题是树形dp或者dfs。回来想了又想……不对啊,树形dp也不能dp 10^5 * 10^5。就算如此,怎么算两个叶子节点

beihai2013 586

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查)

本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。

p1q2r的博客 585

Visual Studio 2013 + Intel(R) Visual Fortran 安装教程

安装了好几遍,ivf都不能加载到vs中,中途放弃了vs,又改用codeblocks编译器,依然在写fortran的时候出现了各种问题,于是又放弃了codeblocks改回vs,总之是折腾了好久,终于装明白了ivf并且将fortran模板成功加载到vs中。 PS:一定要安装Intel Visual Fortran.Composer XE.2013-SP1,不要用Intel Visual Fortr...

Coco_wjy的博客 12万+

hdu 5416 CRB and Tree(暴力)

题目链接:hdu 5416 CRB and Tree dfs一遍,处理出每个位置到根的路径权值亦或和,W(u,v) = W(u,root)^W(v,root),统计所有W(u,root)的情况数,对于每个询问值s,枚举u,ans 加上W(u,root)^s的情况数(Q值比较小)。注意s=0的情况。 #include #include #include #include

不慌不忙、不急不躁 824

7.3 空间矢量调制(SVM)整数算法

本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可

技术工作者 943

hdu 5416 CRB and Tree(异或,思路题)

CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1789    Accepted Submission(s): 573 Problem Description CRB has a tree

TUT我好菜啊 593

0.1 专栏导读:为什么需要从 MM 理解 HMM

本文探讨了GPU计算框架中CPU与GPU内存管理的困境,介绍了Linux内核的HMM(Heterogeneous Memory Management)解决方案。传统显式拷贝模型存在编程复杂、指针失效等问题,而HMM通过共享虚拟地址空间、自动页面迁移等机制实现透明内存管理。文章分析了HMM依赖的Linux内存管理基础设施,包括页表遍历、MMU通知、ZONE_DEVICE等核心组件,并梳理了从经典MM到支持异构设备的进化历程。最后给出了学习HMM的8层知识体系,强调理解底层MM机制是掌握HMM的关键。

图形/计算GPU的驱动与虚拟化技术分享园地 761

【数据集】米级别热红外卫星合集:SDGSAT-1、HotSat-1等

米级别热红外卫星合集:SDGSAT-1、HotSat-1等

WW、forever的博客 1249

HDU 5416 CRB and Tree(dfs 异或逆运算)

CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 760    Accepted Submission(s): 248 Problem Description CRB has a tree,

Fungyow的博客 781

elevation mapping算法3之使用D435i相机离线或在线订阅点云和tf关系生成高程图

本文主要学习使用D435i相机发出的点云作为高程图的点云输入,如何离线输入点云生成高程图,进一步学习如何在线订阅点云生成高程图。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 3488

HDU 5416 CRB and Tree (树形dp)

HDU 5416 CRB and Tree (树形dp) 题意:给定带权边的树,求树上异或和为kkk的路径数(无序对),f(u,u)=0f(u,u)=0f(u,u)=0。 思路:树形dpdpdp,先dfsdfsdfs求出所有从1开始出发到uuu的异或和dp[u]dp[u]dp[u],由异或和性质,显然有f(u,v)=dp[u]⊕dp[v]f(u,v)=dp[u]\oplus dp[v]f(u,v)=dp[u]⊕dp[v]。 统计答案时:对于结点uuu,我们只需求出cnt[dp[u]⊕k]cnt[dp[u]\

Harris-H的博客 595

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

HDU 5416 CRB and Tree dfs

链接 题解链接:http://www.cygmasot.com/index.php/2015/08/20/hdu_541/ 题意: 给定n个点的树 下面n-1行给出边和边权 下面q个询问 每个询问一个数字s 询问有多少条路径使得路径的边权异或结果 == s 结果%(1e9+7) 询问不超过10组。 思路: 设路径{u,v}的边权异或结果为 f(u,v) 设lca 为u v的最

九野的博客 2401

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

异或前缀和+DFS hdu5416 CRB and Tree

传送门:点击打开链接 题意:给你一棵树,然后Q个问题,每个问题询问有存在多少个f(u,v)等于s其中u 思路:这道题我觉得出的非常好,运用了位异或的一些妙用。f(u,v)=f(1,u)^f(1,v),因为假设u,v的lca是p,那么1~p这些节点都是公用的,这部分被异或了两次,就抵消了 然后对于Q次问题,假设某一次问题是s,则有s=f(u,v)=f(1,u)^f(1,v)。那么有f(1,v)

qwb的博客 1828

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu5416CRB and Tree 异或

//给一棵树 //对任意的s //问有多少对(u,v)是的从u到v的路径的所有边权值为s //f(u,v) = f(root , u)^f(root ,v) //只要记录所有点到树根的路径的异或值 //然后枚举端点 #include #include #include using namespace std ; const int maxn = 1e5+10 ; typedef long long

ijbuhv的专栏 736

hdu 5416 CRB and Tree [思维]【树】

hdu 5416 CRB ans Tree 思维 二进制异或 树

Tabris的博客 440

hdu5416 CRB and Tree(树形DP)

题目: CRB and Tree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1247    Accepted Submission(s): 406 Problem Description CRB has a t

hexiecs的技术专栏 504

hdu5416 CRB and Tree(树型dp)

hdu5416题目给你一棵树,树上两点的f值就是他们路径上边权的异或,现在给定s,求f值等于s的点对。思路由于异或两次相当于没有异或,我们记录每个点到根节点的路径异或值,对于任意两点之间的路径异或值只要吧到根节点的值异或一下就可以了,最后相当于枚举符合情况的个数,如果s=0,还要把不走的n个情况加上去。(maxn大小开的不一样会WA,不知道为什么。。。)代码#include <iostream> #

天道酬勤 304

HDU 5416 CRB and Tree(dfs)

CRB and TreeTime Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1995 Accepted Submission(s): 614Problem Description CRB has a tree, whose verti

MrBlank的ACM记事本 330

HDU 5416 CRB and Tree

棒子出的题目,统计一下两点间所有边的值的抑或值为k的有多少,思路很简单,运用了抑或运算的一些性质,因为一条路走两次最后的抑或值为0,对结果没有影响所以可以将题意转化为从一个顶点走到根节点再从根节点走到另外一个点,这样只需要用树形dp统计一下从根节点到其他节点的值的个数就可以了,这样最后再做一下遍历就可以结束。#include #include #include #include #incl

beyhhhh的博客 370

hdu 5416 CRB and Tree 离线处理树xor前缀

题意:给出一棵树,和树边的权值,q个询问,每次给出s求有多少条路径上边权值异或值为s。 由于可得f(u,v) = f(1,u)\ f(1, u) f(1,u) ^f(1,v) f(1, v)f(1,v), 那么就离线处理出以1为树根的树xor前缀,并hash记录该异或值数量,对于每个询问s,遍历1~n,累计num【xor【i】】即可,注意s = 0时,所有的值1~n都满足(x^x =

uuuuuu 423

HDU 5416 CRB and Tree (DFS)

DFS这棵树,对于每个点u算出从根节点到这个点总共的异或值val[u],并记录每个值的数量。 因为异或的性质: 1.对于u到v的这条路,不管是u,v在根节点出发的同一条路上还是两条路上,f(u,v)都等于k[u]^k[v]。 2.s^t=k,则t^k=s。 且询问只有10组,那么对于每个询问s,可以用遍历0到200000的所有值i,算出和每个值异或等于s的那个对应的值k,然后答案加

Baoli1008的专栏 482

hdu 5416 CRB and Tree 求树上路径异或结果为s的有多少

题意:给一颗树,定义f(u,v)为u到v路径上的异或结果,现在给定s,要求异或结果为s的路径有多少条。(1,2)和(2,1)只算一种。根据异或的特性有f(u,v)=f(1,u)^f(1,v),先把f(1,i)的所有i都求出,然后对于每一个u(1~n)如果有f(u,v)=s的话那么有f(1,v)=s^f(1,u),所以求一下f(1,v)有多少个,加起来就行了,最后要特殊讨论下s==0的情况。//aut

inf_force 1166

hdu 5416 CRB and Tree (DFS)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5416 题意:定给一棵树,有N-1条边,每条边有一个权值,查询两个点u到v的异或和为s的路的条数(u可以等于v)。 分析:预处理出所有的顶点到root的异或和,然后对于每次查询枚举起点就行了。 代码: #include #include #include #include using nam

w20810的专栏 638
上一篇: hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))
下一篇: 2015 Multi-University Training Contest 10(hdu 5406 - hdu 5416)
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值