Tree Xor(未完全搞定)

Tree Xor

题意:

一颗有n个点的树,边权给出,第i个节点的权值为Wi,但并不知道Wi,只知道Wi在[Li,Ri],边权等于两端点的异或值
问W序列有多少可能

题解:

如果我们知道一个点的值,就可以推出其他所有点的值。
现在我们令w[1]=0,解出剩下的w,如果令w[1] = a ,剩下的w都会xor上a
所以就变成了求解合法的a的数量,限制有n个不等式,形式为:
L[i] <= W[i] Xor a <= R[i]
你可能会觉得a会属于[L[i] Xor W[i],R[i] Xor w[i]],但问题是原本[L,R]是连续的,但是异或w[i]后不一定连续。
出题很妙的地方:

我们利用[0,230-1]的线段树,把[L[i],R[i]]分成O(logW)个连续的区间,且每个区间的形式是K…30位相同,0…k-1位是0到2k-1,这样的区间异或上w[i]后仍然还是一个区间

刚才这一部分是官方题解里的,谈谈我的理解
刚才说了区间xor W[i]后不一定连续,但是如果我们把区间[L[i],R[i]]分成好几个小区间,这个小区间Xor W[i]后,这几个小区间可能本身还是连续的(不看这几个小区间之间的联系,只看小区间本身)。
那该怎么分呢?我们利用[0,230-1]的线段树,我们想下建树过程,一开始是[L=0,R=111111…(一共30个1)],然后分治建边,分成两个区间[L=0,R=1111…(一共29个)],[L=1000…(一共29个0),R=11111…(一共30个1)],一直这样下去,得到的区间都满足下面形式:
[xxxx0000,xxxx1111],xxxx部分是相同的,也就是前k位相同,后k位分别是0和1
这样的区间异或上一个数x后仍然还是一个连续完整区间(很神奇,可以自己测试以下)
我用L=80(101000),R=95(1011111),当x小于等于15(1111)时,[L,R]的区间还是本区间只是内部打乱顺序,当大于15时[L,R]区间会整体变小,但是区间长度依旧不变。我认为是一位这个区间的对称的,所以才会这样
这样就可以将原区间[L[i],R[i]]拆成n组区间,a属于这个n组区间,那n组区间求个交(可以利用差分),就得到a的数量

代码:

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <iomanip>
#include <map>
#include <cstdio>
#include <stack>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int ,int> pii;
#define endl '\n'
ll gcd(ll a, ll b){return b == 0 ? a : gcd(b, a % b);
}
void input(){freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
}
inline int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
const int N = 1e6+10, M = N * 2, inf = 1e8;
int n, L[N], R[N], W[N];
vector<pii> G[N];
vector<pii> seg, v;
// l r 是当前点限制的左右取值范围
// vl vr 是当前这段区间所代表的取值范围
// dep 表示深度,v是在w1取0的条件下当前点的取值
void build(int l, int r, int vl, int vr, int dep, int v){if(l <= vl && vr <= r){int nowl = (vl ^ v) & (((1<<30)-1) ^ ((1<<dep) - 1));int nowr = nowl + (1<<dep) - 1;//cout<<"vl="<<vl<<" "<<"vr="<<vr<<endl;//cout<<"nowl="<<nowl<<" "<<"nowr="<<nowr<<endl; seg.push_back({nowl, nowr});}else{int mid = (vl + vr) >> 1;if(l <= mid) build(l, r, vl, mid, dep-1, v);if(r > mid) build(l, r, mid+1, vr, dep-1, v);}
}
// 使用dfs求解每个点的值
void dfs(int x, int fa, int val){if(x != 1) build(L[x], R[x], 0, (1<<30)-1, 30, val);for(auto i : G[x]){if(i.first == fa) continue;dfs(i.first, x, i.second^val);}
}
int main(){ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin>>n;for(int i = 1; i <= n; i++) cin>>L[i]>>R[i];for(int i = 1; i < n; i++){int u, v, w; cin>>u>>v>>w;G[u].push_back({v, w});G[v].push_back({u, w});}dfs(1, -1, 0);seg.push_back({L[1], R[1]});for(auto i : seg) v.push_back({i.first, 1}), v.push_back({i.second + 1, -1});//差分思想 sort(v.begin(), v.end());int res = 0, sum = 0;for(int i = 0; i < (int)v.size(); i++){sum += v[i].second;if(sum == n) //当存在n个区间同时满足时,就是a的取值范围 res += v[i+1].first - v[i].first;}cout<<res<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构&#xff0c;部署的微服务主要包括统一网关&#xff08;使用Ocelot开发&#xff09;、统一认证&#xff08;IdentityServer4&#xff09;、应用服务&#xff08;asp.net core web api&#xff09;&#xff1b;本文不…

AtCoder3950 [AGC022E] Median Replace(DFA + dp)

problem solution 可以从 DFA\text{DFA}DFA 的思想来考虑这道题。 考虑建一个 DFA\text{DFA}DFA 只接受最后可以变成字符串 111 的原串。 因为每次是选择三个 连续/相邻 的位置操作&#xff0c;限制是比较强的&#xff0c;无非有三种情况。 case1 三个全 111&#xff0c;操…

Minimum grid

Minimum grid 题意&#xff1a; 一个n * n的矩阵&#xff0c;有m个位置需要填数&#xff0c;填的数的范围是0<k<1e6,需要满足第i行的最大值是b&#xff0c;第j列的最大值是ci&#xff0c;求一个满足条件的最小代价 n<2e3,m<8e5,k<1e6 题解&#xff1a; 如果…

ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

一、前言在之前的文章&#xff08;ASP.NET Core 实战&#xff1a;Linux 小白的 .NET Core 部署之路&#xff09;中&#xff0c;我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core Runtime、Nginx、MySQL&#xff0c;以及如何将我们的 ASP.NET Core MVC 程序部署到 Li…

AtCoder 4169 [ARC100D] Colorful Sequences(dp)

problem 洛谷链接 solution 逆向考虑。ansansans 所有蛋糕中的 aaa 序列出现次数 −-− 在 non−colorfulnon-colorfulnon−colorful 蛋糕中的出现次数。 在所有蛋糕中的出现次数&#xff0c;即 (n−m1)⋅kn−m(n-m1)k^{n-m}(n−m1)⋅kn−m&#xff0c;枚举 aaa 序列开头的…

VS2017 无法连接到Web服务器“IIS Express”终极解决方案

今天日了gou了&#xff0c;一大早打开VS2017的时候出现无法连接到Web服务器“IIS Express”的错误&#xff0c;然后必应了一下&#xff0c;再谷歌了一下找到的解决方法也都千篇一律&#xff0c;奈何都没能解决&#xff0c;最后通过静下心来的思考&#xff0c;尝试解决了问题&am…

CodeForces 1361E James and the Chase(dfs + 结论)

problem 洛谷链接 solution 看到这个 20%20\%20% 的特殊性质&#xff0c;脑海里第一个就想到了随机化算法。已经PTSD了着实上头 如果本题只是随便求一个 interesting\text{interesting}interesting 的点&#xff0c;那就非常简单了。 随机化一个点&#xff0c;检查这个点是…

2021牛客暑期多校训练营4

2021牛客暑期多校训练营4 题号题目知识点ACourseBSample GameCLCSDRebuild TreeETree Xor思维线段树FJust a jokeGProductHConvolutionIInverse PairJAverage

Docker最全教程之使用.NET Core推送钉钉消息(二十)

前言上一篇我们通过实战分享了使用Go推送钉钉消息&#xff0c;由于技痒&#xff0c;笔者现在也编写了一个.NET Core的Demo&#xff0c;作为简单的对照和说明。最后&#xff0c;由于精力有限&#xff0c;笔者希望有兴趣的朋友可以分享下使用CoreRT将.NET Core编译成机器代码这块…

[线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程

线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0​,a1​,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r_{m-1}\}{r0​,r1​,...,rm−1​} 。 若对于任意 m−1≤nm-1\le nm−1≤n &#xff0c;有 ∑i0m−1an−iri0\sum_{i0}^{m-1}a_{n-i}r_i0∑…

Average

Average 题意&#xff1a; 矩阵W的值可以通过数组a和b得到&#xff0c;W[i][j]a[i]b[j],现在求W的一个子矩阵&#xff0c;平均值最大&#xff0c;且子矩阵必须满足宽度至少是x&#xff0c;高度至少是y&#xff0c;计算最大平均值 题解&#xff1a; 那答案就变成了分别对a和b…

开箱即用Bumblebee独立部署搭建webapi网关详解

在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关&#xff1b;但这样显然有些麻烦&#xff0c;毕竟很多时候可能只需要一个简单负载处理&#xff0c;还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的事情&#xff1b;如果有负载方面的调整还需要…

LCS(2021牛客多校4)

LCS(2021牛客多校4) 题意&#xff1a; 让你构造三个字符串s1,s2,s3&#xff0c;长度均为n,要求LCS(s1,s2)a,LCS(s2,s3)b,LCS(s1,s3)c 题解&#xff1a; 先考虑三个串互相LCS为x,y,z,且x>y>z 显然如果xy-n>z则无解&#xff0c;反之xy-n<z有解 那么就先给三个串加…

CodeForces 1616H Keep XOR Low {a^b≤x} / CodeForces gym102331 Bitwise Xor {a^b≥x}(trie树 + 计数)

文章目录CodeForces 1616H Keep XOR LowproblemsolutioncodeCodeForces gym102331 Bitwise XorproblemsolutioncodeCodeForces 1616H Keep XOR Low problem 洛谷链接 solution 虽然选的是一个子集&#xff0c;但本质还是二元限制。 这非常类似以前做过的题目&#xff0c;已…

ASP.NET Core 文件系统

静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 紧接上一讲 中间件 之后&#xff0c;今天来我们来讲一下关于 ASP.NET Core 中静态文件服务。什么是静态文件&#xff1f;先看一下下面例子&#xff08;在客户端浏览器中通过 url 路径访问了网站的一张图片&#xff09…

[C++] iota语句的语法

头文件为 numeric #include <numeric> using namespace std;语法和 sort / lower_bound / upper_bound 等差不多&#xff0c;都是前闭后开的原则。 iota(Ax,Ay,z) &#xff1a;表示将 AAA 数组的 [x,y)[x,y)[x,y) 区间进行填充&#xff0c;从 zzz 开始&#xff0c;每填…

如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...

这篇文章介绍一下&#xff0c;如何使用VS2017给asp.net core添加容器支持&#xff0c;并发布镜像到私有docker hub&#xff0c;然后用chart管理容器镜像的操作流程。话不多说&#xff0c;just do it.新建项目首先新建一个asp.net core项目&#xff0c;这里我新建一个WebApi默认…

Inverse Pair

Inverse Pair 题意&#xff1a; 一个数组a&#xff0c;现在构造一个数组c&#xff0c;c[i]a[i]0/1&#xff08;0或1&#xff09;&#xff0c;使得c的逆序对最少 题解&#xff1a; 如果x在x1的后面&#xff0c;我们让x这个数1,x1不变&#xff0c;就可以让逆序对少1。如果x在…

CodeForces 1610H Squid Game(延迟贪心 + 构造 + 树状数组)

problem 洛谷链接 solution 考虑重新随便钦定一个点为“根”&#xff0c;并且强制根必须是关键点。 则所有 x−yx-yx−y 不是直系祖先-子代的要求&#xff08;要求Ⅰ&#xff09;&#xff0c;即 xxx 不是 yyy 祖先&#xff0c;yyy 也不是 xxx 祖先&#xff0c;一定都被满足…

P4551 最长异或路径

P4551 最长异或路径 题意&#xff1a; 给定一棵 n 个点的带权树&#xff0c;结点下标从 1 开始到 n。寻找树中找两个结点&#xff0c;求最长的异或路径。 异或路径指的是指两个结点之间唯一路径上的所有边权的异或。 题解&#xff1a; 我们指定1为根节点&#xff0c;T(u,v…