BC#64 4.Tree
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5589
对于u,v的xor和就是u到根的xor和 xor上 v到根的xor和。看到n<=5w,考虑莫队,因为要xor和>m,那么用二进制拆分的思想,建一棵字典树,维护字典树的子树大小。显然>m时,从大到小枚举二进制位,存在xor和的某个二进制位为1而m的为0。时间复杂度:q*n^1/2*log(c)
(比赛时没想到字典树,哭瞎。还是太弱了TAT
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<queue>
#include<set>
#include<cmath>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define down(i,l,r) for (int i=l;i>=r;i--)
#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 70050
#define inf int(1e9)
#define mm 1000000007
#define esp 1e-6
using namespace std;
#define ll long long
struct edge{int obj,pre,c;
}e[maxn*];
struct data{int l,r,id,ans,b;
}q[maxn];
int head[maxn],a[maxn],cnt[maxn*];
int n,m,Q,tot,ans,l,r;
int read(){
int x=,f=; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-; ch=getchar();}
while (isdigit(ch)) x=x*+ch-'',ch=getchar();
return x*f;
}
void dfs(int u,int fa){
for (int j=head[u];j;j=e[j].pre){
int v=e[j].obj;
if (v!=fa) {
a[v]=a[u]^e[j].c;
dfs(v,u);
}
}
}
void insert(int x,int y,int z){
e[++tot].obj=y; e[tot].pre=head[x]; head[x]=tot; e[tot].c=z;
}
void add(int x){
int u=a[x],now=;
down(i,,){
if (((m>>i)&)==) ans+=cnt[now<<|((u>>i&)^)];
now=now<<|((u^m)>>i&);
}
now=;
down(i,,){
cnt[now<<|(u>>i&)]++;
now=now<<|(u>>i&);
}
}
void del(int x){
int u=a[x],now=;
down(i,,){
cnt[now<<|(u>>i&)]--;
now=now<<|(u>>i&);
}
now=;
down(i,,){
if (((m>>i)&)==) ans-=cnt[now<<|((u>>i&)^)];
now=now<<|((u^m)>>i&);
}
}
bool cmp(data a,data b){
return (a.b==b.b&&a.r<b.r)||(a.b<b.b);
}
int main(){
while (~scanf("%d%d%d",&n,&m,&Q)){
tot=; clr(head,); clr(cnt,);
int x,y,z;
rep(i,,n-){
x=read(); y=read(); z=read();
insert(x,y,z);
insert(y,x,z);
}
dfs(,);
int block=int(sqrt(n));
rep(i,,Q){
q[i].l=read(); q[i].r=read(); q[i].id=i; q[i].b=q[i].l/block+;
}
sort(q+,q++Q,cmp);
ans=; l=; r=;
rep(i,,Q){
int now=q[i].id;
while (r<q[i].r) add(++r);
while (r>q[i].r) del(r--);
while (l>q[i].l) add(--l);
while (l<q[i].l) del(l++);
q[now].ans=ans;
}
rep(i,,Q) printf("%d\n",q[i].ans);
}
return ;
}
BC#64 4.Tree的更多相关文章
- CoreCLR源码探索(八) JIT的工作原理(详解篇)
在上一篇我们对CoreCLR中的JIT有了一个基础的了解, 这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在https://github.com/dotnet/coreclr/tree/m ...
- C语言复习笔记-17种小算法-解决实际问题
判断日期为一年中的第几天(考虑闰年) 1 /* 2 * 计算该日在本年中是第几天,注意闰年问题 3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 4 * 特殊情况,闰年且 ...
- Memory Dump 分析器
Visual Studio 2013 新功能 Memory Dump 分析器 TechEd2013 发现新功能 12月5日和6日,在国家会议中心参加了微软的 TechEd2013 技术大会,了解了 ...
- Java加密算法
密码的常用术语: 1.密码体制:由明文空间.密文空间.密钥空间.加密算法和解密算法5部分组成. 2.密码协议:也称为安全协议,是指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务. ...
- 二、linux题型
1.[root@pyrene ~]# 这里root是当前登录用户 @分割 pyrene是主机名 -:表示当前登录环境 #:表示管理员 2.在/data下面创建一个文件oldboy. ...
- 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))
扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...
- TensorFlow中的语义分割套件
TensorFlow中的语义分割套件 描述 该存储库用作语义细分套件.目标是轻松实现,训练和测试新的语义细分模型!完成以下内容: 训练和测试方式 资料扩充 几种最先进的模型.轻松随插即用 能够使用任何 ...
- 1080 - Binary Simulation
1080 - Binary Simulation PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 ...
- POJ1639 Picnic Planning (限制入度最小生成树)
节点1是有度数限制的,把节点1去掉,就会形成若干个连通块,在每个连通块内部求最小生成树(prim算法实现),并求出每个连通块与1相连的最短的边,这样形成了初始状态的生成树. 假设(1,x)这条边没在生 ...
随机推荐
- bzoj 3242: [Noi2013]快餐店
Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...
- SQL Server中varchar和nvarchar的区别
varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节的实际长度,而不是 n 个字节.nvar ...
- ConcurrentHashMap 从Java7 到 Java8的改变
一.关于分段锁 集合框架很大程度减少了java程序员的重复劳动,然而,在Java多线程环境中,以线程安全的方式使用集合类是一个首先考虑的问题. 越来越多的程序员了解到了ConcurrentHashMa ...
- java 异常处理与返回
try{ // 1. return ++x; }catch(){ }finally{ //2. x++; } 实际返回值还是 ++x后的结果,因为 ++x 后 x 的值会入栈,作为返回结果: 以上代码 ...
- python爬虫爬取大众点评并导入redis
直接上代码,导入redis的中文编码没有解决,日后解决了会第一时间上代码!新手上路,多多包涵! # -*- coding: utf-8 -*- import re import requests fr ...
- 【开源】AspnetCore 2.0 自动API文档生成组件,支持protobuffer
本文地址 http://www.cnblogs.com/likeli/p/8204054.html 关于 API文档自动生成,用于对APP端的开发帮助文档生成,默认ProtoBuffer传输格式. 本 ...
- Android基础夯实--你了解Handler有多少?
概述 对于刚入门的同学来说,往往都会对Handler比较迷茫,到底Handler是个什么样的东西.当然,可能对于一些有工作经验的工程师来说,他们也不一定能很准确地描述,我们来看下API的介绍. Han ...
- thinkphp5使用PHPExcel导入Excel数据
安装PHPExcel扩展类 地址:https://github.com/PHPOffice/PHPExcel ①通过composer安装 ②手动下载, 放在项目的extend目录下 代码中引入 由于P ...
- python利用pysvn发布lib的小程序
背景: 本人在公司的平台部门工作,我们部门写出的代码都是编译成.a文件,定期发布版本到各个产品,现在老大要求我负责每周向公司的某个产品发布lib.发布lib的步骤大概就是自动化的兄弟给我提供一个归档的 ...
- Netty入门之客户端与服务端通信(二)
Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...