【2019西安邀请赛J】And And And(树链贡献)

Edsger W. Dijkstra -- 巨人的肩膀 Dijkstra的成功人生 阅读详情

https://nanti.jisuanke.com/t/39277

题意

给出一棵树,以及树边权,求出这个公式
在这里插入图片描述

题意

这里规定了偏序关系,所以不用重复计算两次。
将这题转化为求两个点所做的贡献。
首先要明白异或的性质。
a ^ b = 0 等价于 a = b
那么a到b这条链上异或等于0等价于,a到根的异或值 = b到根的异或值。

在这里插入图片描述
观察这颗树,(1,5)符合答案,哪些链会包括(1,5)呢?
(1,5),(3,5),(4,5),(6,5)。
可以知道(1,5)出现的次数,等于1 "右边的点数" x 5 "左边的点数" = 4*1

再举个例子
(2,6)这条链异或值也为0,包含(2,6)的有 (2,6),(5,6)。
等于 2"左边的点数" x 6左边的点数" = 2*1
所以答案为 2+4 = 6。

分两种情况讨论两点(x,y) = 0所做的贡献。

  1. x 和 y 的LCA是 x或者y
  2. x 和 y 的LCA不是 x 或者 y

对于 2 ,贡献就是 x的子树大小*y的子树大小。但还有一个前提便是x到根的异或值要等于y到根的异或值。
所以需要用一个map记录异或值为 k 时的总子树大小。
设sz[x]:为x的子树大小。
k: x到根的异或值
mp[k]: 当前异或值为k的子树大小总和
dfs整棵树,到dfs到x的时候,点x的贡献便是:sz[x] * mp[k]。
因为是有序的,所以x的贡献只会算一遍。

对于1,子树的大小并不是等于"右边的点数"或者是"左边的点数"。
需要加一个临时变量 sum。
记录此时异或值为k的情况下其"右边的点数","左边的点数"还是等于子树大小。
具体看代码吧。

代码

#include <unordered_map>
#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<ll,ll> pii;
const int maxn = 1e5+5;
const int mod = 1e9+7;
ll ans;
vector<pii> G[maxn];
unordered_map<ll,ll> mp;
ll sz[maxn];

void dfs(int x) {
    sz[x] = 1;
    for(pii u : G[x]) {
        dfs(u.first);
        sz[x] += sz[u.first];
    }
}

// 不同链
void dfs1(int x, ll xr) {
    
    ans = (ans+1ll*mp[xr]*sz[x])%mod;
    for(pii u : G[x]) {
        dfs1(u.first, xr^u.second);
    }
    mp[xr] = (mp[xr]+sz[x])%mod;
}
ll sum = 0;
// 同链
void dfs2(int x, ll xr) {
    ans = (ans+1ll*mp[xr]*sz[x])%mod;
    for(pii u : G[x]) {
        sum = (sum+sz[x]-sz[u.first])%mod;
        mp[xr] = (mp[xr]+sum)%mod;
        dfs2(u.first, xr^u.second);
        mp[xr] = (mp[xr]-sum)%mod;
        sum = (sum-sz[x]+sz[u.first])%mod;
    }
}
int main() {
    int n;
    scanf("%d", &n);
    for(int i = 2; i <= n; ++i) {
        int fa;
        ll w;
        scanf("%d%lld", &fa, &w);
        G[fa].push_back(pii(i,w));
    }
    dfs(1);
    dfs1(1,0);
    // printf("%lld\n", ans);
    mp.clear();
    dfs2(1,0);
    printf("%lld\n", ans);
    return 0;
}
2019西安邀请赛 J and and and(树上启发式合并) 链接 https://nanti.jisuanke.com/t/39277 分两种情况讨论即可,路径为一条链和不为一条链的即可 启发式合并维护 ologn ac代码 ` #include #include #include #include #include #define fi first #define se second #define lson l,mid,rt<<1 #def... 阅读详情

相关推荐

2019 icpc西安邀请赛 J题 And And And

A tree is a connected graph without cycles. You are given a rooted tree withnnnodes, labeled from1 to n1ton. The tree is rooted at node11. The parent of theii-th node isf_{a_i}fai​​. The edge we...

c3po 584

迪杰斯特拉 (Edsger W. Dijkstra):计算机科学的结构与秩序奠基人

迪杰斯特拉:计算机科学巨匠的卓越贡献 荷兰计算机科学家艾兹赫尔·迪杰斯特拉是计算机科学领域的奠基性人物。他提出了著名的Dijkstra最短路径算法,解决了加权图中的最优路径问题,至今仍是图论和算法教学的核心内容。在操作系统领域,他发明了信号量机制和银行家算法,为并发编程和死锁处理奠定了理论基础。作为结构化编程的先驱,他批判GOTO语句的滥用,倡导使用顺序、选择和循环三种基本结构构建程序。迪杰斯特拉以严谨的数学思维和追求简洁的编程哲学著称,1972年获得图灵奖。他的工作深刻影响了现代计算机科学的多个核心领域。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 2059

操作系统之《迪杰斯特拉有话说》

在操作系统的架构上面,计算机界的牛人——迪杰斯特拉做出过杰出的贡献,其工作的精华发表在其论文《The Structure of the "THE"-Multiprogramming》,论文分为,内存的分配,存储器的分配和系统总的层次架构。作为对大学的服务,平稳处理用户程序的连续流,具有(1)缩短了短期程序的周转时间;(2)外围设备的经济使用;(3)自动控制后备存储与中央处理器的经济用途相结合,以及...

i_Panshi的博客 997

你不知道的关于计算机大师Dijkstra的事情

Dijkstra 的全名叫 Edsger Wybe Dijkstra(艾兹赫尔·韦伯·戴克斯特拉)。大部分中国程序员如果能记住这个名字是因为学过计算最短路径的「Dijkstra 算法」,然而大部分人都难以记住正确的拼写,因为他是荷兰人,名字不符合英语的发音规则。 他是几位影响力最大的计算科学的奠基人之一,也是少数同时从工程和理论的角度塑造这个新学科的人。他的根本性贡献覆盖了很多领域,包括:编

qq51931373的专栏 3166

IEC 61851-24:2023 电动汽车导电充电系统 - 第24部分:直流电动汽车供电设备与电动汽车之间的数字通信,用于控制直流充电 - 完整英文电子版(110页)

IEC 61851-24:2023 与 IEC 61851-23 共同适用于直流电动车供电设备与电动道路车辆(EV)之间的数字通信,用于控制导电直流电力传输,额定电源电压最高可达1000伏交流电或最高1500伏直流电,额定输出电压最高可达1500伏直流电。

绝缘体上硅(SOI) vs 传统硅片:5个关键性能对比及适用场景分析

本文深入对比了绝缘体上硅(SOI)与传统硅片在功耗、速度、隔离性等5个关键性能维度的差异,并分析了各自适用场景。SOI技术凭借其独特的埋氧层结构,在低功耗、高频应用和极端环境下展现出显著优势,特别适合移动设备、汽车电子和航天应用。

weixin_30335575的博客 554

2019西安邀请赛 J And And And

https://nanti.jisuanke.com/t/39277 上半年湘潭西安全败在树形DP不会,然后浪费大量时间后做另外一题还没做完,菜哭.jpg 这题首先是想到路径的异或为0可以变成点到根的路径异或值相等 然后想到枚举u' <v' 这个相等更方便,接着就是想怎么统计有多少u<v可以选 然后比赛的时候就不会了。。。。头都想烂了,主要是当时已经写了4题了,然后又到了后期,...

binarycopycode 232

【论文笔记】LIME: low-light image enhancement via illumination map estimation

【论文笔记】LIME: low-light image enhancement via illumination map estimation 一篇低光图像增强,引用超1000次的经典论文

weixin_45565519的博客 1793

理解最短路径——迪杰斯特拉(dijkstra)算法

原文链接:http://ibupu.link/?id=29/* 大家可以先看大神的理论知识,将dijkstra思想搞懂,然后在 来看我举得简单的例子 */输入输出输入: v e e行 ,每行表示俩个节点相连的边的长度 输出: 节点1的单源最短路径 input: 6 9 1 2 7 1 3 9 1 6 14 2 3 10 2 4 15 3 4 11 3 6 2 4 5

爱敲代码的小鼠的博客 639

数字IC笔记-低功耗技术

传统的降低Power的方法主要有: 1.门控时钟技术(clock gating) 2.多阈值电压技术(MultiShreshold) 3.动态电压频率调节技术(DVFS) 目前有以下几种低功耗技术: 1.多电压技术(Multi-Voltage) 2.MTCOMS Power Gating 技术(多阈值功耗控制技术),比如基带部分中的2G、3G、CDMA、LTE等通过awake—>sleep—>awake的方式间歇式的打开或关断其电源,power gating 可以完全关掉dynamic的pow

sinat_41774721的博客 1932

VFIO框架源码分析(二十一)- IOMMUFD 模式下的 DMA 映射机制

在虚拟化 I/O 的世界里,无论上层管理面(如对象模型、设备绑定)如何重构,数据面最核心的任务始终未变——DMA 映射(DMA Mapping)。即如何建立 Guest Physical Address (GPA) 到 Host Physical Address (HPA) 的映射关系,并将其填入 IOMMU 的硬件页表中,使得直通设备能够正确访问虚拟机内存。在 Legacy VFIO (Type1) 时代,这一职责由承担,它通过ioctl 操作 Container。

qq_36071928的博客 1007

Serval and Rooted Tree

D. Serval and Rooted Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Now Serval is a junior high school student in Japari Mi...

1999 413

目前最强的价格行为技术分析AI!大A也能用!还免费!

有球友推荐了一个历史最强的价格行为技术分析AI工具,使用下来确实很惊艳,解决了 很多AI工具黑盒过程,难以回溯的问题,他的决策过程可解释,提供决策树、诊断结果、原始响应、调试信息和未来走势预期。用户能够看到模型为什么选择“做多、做空或不下单”。会检查置信度、入场条件、盈亏比、结构失效和冷却期。最大的优点不是“预测一定准确”,而是把主观的价格行为分析整理成了可重复、可解释、可校验、可持续跟踪的工程化流程。本文记录本项目在 Windows 上的实际部署与启动方法。

木头大左的博客 71

And And And【2019西安邀请赛】【点分治】

题目链接 A tree is a connected graph without cycles. You are given a rooted tree withnnnodes, labeled from1 to n1ton. The tree is rooted at node11. The parent of theii-th node isf_{a_i}fai​​. The e...

既然弱小,就只顾变强就是了 410

商用车重型多挡位机械式变速器(AMT)结构设计与仿真分析

本文针对商用车重型AMT变速器开展结构设计与仿真分析。设计采用12挡双中间轴结构,匹配400kW柴油发动机,最大扭矩2000Nm。通过等比级数分配传动比(头挡14.5,最高挡0.78),采用主副箱组合实现多挡位。双中间轴结构可抵消径向力,提升承载能力。关键设计包括:235mm中心距、4.5-5.0mm齿轮模数、锁环式同步器和复合润滑系统。通过Python参数化建模进行强度校核,计算显示中间轴在2000Nm工况下等效应力满足安全系数要求(屈服强度850MPa,安全系数≥2)。该设计解决了传统MT变速器操作强度

AI的内部世界的博客 113

《时序分析、时序约束和时序收敛》专栏的说明与导航

《时序分析、时序约束和时序收敛》专栏的说明与导航(建议阅读)。

孤独的单刀 14万+

C. Queen(思路题)

You are given a rooted tree with vertices numerated from11tonn. A tree is a connected graph without cycles. A rooted tree has a special vertex named root. Ancestors of the vertexiiare all vertic...

Kuguotao的博客 885

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CodeForces 699D—— Fix a Tree(并查集判断环)

D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A tree is an undirected connected graph witho

say_c_box的博客 1505

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

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

2019 acm-icpc 西安全国邀请赛 J

2019 acm-icpc 西安全国邀请赛 J (树上dp or 树上点分治) (下文为dp做法,点分治留坑) 题目链接: https://nanti.jisuanke.com/t/39277 题意: 给一棵树,X(u,v)为uv两点件所有边的异或值 求: 结果取模1e9+7 数据范围:n<=1e5, 边权w<=1e18 思路: 用map记录 每个异或值的子树大小 在子节点与父节点合...

Yu1的博客 895

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

The 2019 ACM-ICPC Shannxi J. And And And (点分治模板题)

J. And And And A tree is a connected graph without cycles. You are given a rooted tree withnnnodes, labeled from1ton1ton. The tree is rooted at node11. The parent of theii-th node isfaifai​​. T...

FIVE 518

2019 西安邀请赛 J And And And【树形DP】

传送门 思路: 如果要求异或为0的路径的个数,这就是一个傻逼题。但是他要求的集合的个数。可以从刚才那个问题扩展开来,问有多少条路径的子路径的异或值为0。这是一个计数的问题,我们知道异或有一个性质 x^x=0 1为树的根节点,xor[i] 表示i到根节点路径上的的异或值 我们可以发现当两个点(s,e)不在一条链上时,ans 应该加上 size[s]*size[e] 如果两个点在一条链上的时候( ...

qq_42211531的博客 374

Shannon的贡献和大师风范

西安电子科技大学通信工程学院  王育民 一、Shannon生平  Shannon 1916年4月30日出生于美国密歇根(Michigan)州皮托斯基(Petoskey)的加洛德(Gaylord)小镇。父亲是商人,曾当过遗嘱鉴定员,母亲是德国移民的女儿,曾任加洛德中学校长。Shannon于1932年从加洛德学校高中毕业。中学时代曾参加镇上的乐队,吹奏中音萨克斯号。中学时代还靠当报童、电报

Winter 2791

1972年图灵奖得主 - 艾兹格·迪杰斯特拉 (Edsger Wybe Dijkstra)

1972年图灵奖得主 - 艾兹格·迪杰斯特拉 (Edsger Wybe Dijkstra)背景程序员的工作中布满了起源于迪杰斯特拉或由其提出的词汇 - 显示,死锁,信号量,无GOTO程序设计,结构化编程。 但他对程序设计的影响力远非任何术语表所能阐示。迪杰斯特拉为图灵奖所认可的珍贵天赋是其本人的风格:他的对智力构成极高挑战的编程方法,他雄辩的主张和和对程序应该被正确地编写而不只是被调试正确的实践示范,以及他对程序设计基础问题的启发性的理解。 他大约发表了12篇论文,包括技术和思想方面,其中尤其需要注意的是他

liyong_zhang的专栏 5903

And And And (西安邀请赛 点分治 或 树形DP)

题目 https://nanti.jisuanke.com/t/39277 题意 求所有对于一条异或和为0的链有多少条链包含的这条链 即 如果x 到 y 异或和为0 那么统计所有包含x-y的路径 找到所有x - y 求和 思路 树上路径问题 点分治 预处理每个结点有多少后继结点 : 随便选一个点为根 统计字数结点数和记录父亲 其他看代码吧 #include <bit...

七九河开的博客 414

既熟悉又陌生的“迪杰斯特拉”

最近看一些专业课的书籍,在不同的书本上看到了Dijkstra(迪杰斯特拉)这个名字;可以毫不夸张地说,凡是学信息相关专业的学生都应该听说过他的名字(课堂上曾提到的“迪杰斯特拉算法”就是他提出来的,在考试中也经常遇到)。但是,除了这个之外,大家对他的了解应该是很少的,所以,我认为他

周兆熊的专栏 4135
上一篇: 【Gym 102059A】Coloring Roads(树链剖分+单调栈)
下一篇: 【Linux学习笔记】centOS7无法使用yum
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值