UOJ #207. 共价大爷游长沙】的更多相关文章

#207. 共价大爷游长沙 链接:http://uoj.ac/problem/207 题意:给一棵树,要求支持加边.删边.询问一条边是否被所有路径覆盖.同时路径端点集合有加入与删除操作. 想法: 考虑一个点与其父亲边是否被一条路径经过.就是该路径的一端在其子树中,另一端不在.就是其子树中一条路径的端点出现次数为奇数.随机给一条路径两端一个权值(错误概率为$\frac{n^2}{2^w}$),然后如果一个节点子树xor值等于当前路径xor值,其到父亲边就是可行的边. 然后便是LCT维护加边,删边,…
#207. 共价大爷游长沙 题意:一棵树,支持加边删边,加入点对,删除点对,询问所有点对是否经过一条边 一开始一直想在边权上做文章,或者从连通分量角度考虑,比较接近正解了,但是没想到给点对分配权值所以没做出来 题解的后两种做法说的很清楚了,我用了第二种因为我没写过lct维护子树信息 给点对分配权值后,我们只要看一条边的权值是否等于当前异或和就行了 加边删边时,把删除边\((u,v)\)的权值异或到之后\((u,v)\)的路径上,巧妙利用了异或的自反性,和wc那道xor很像 #include <i…
火车司机出秦川,跳蚤国王下江南,共价大爷游长沙.每个周末,勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个 \(n\) 个点 \(n−1\) 条边的无向图,点编号为 \(1\) 到 \(n\),任意两点间均存在恰好一条路径,显然两个点之间最多也只会有一条边相连.有一个包含一些点对 \((x,y)\) 的可重集合S,共价大爷的旅行路线是这样确定的:每次他会选择 \(S\) 中的某一对点 \((x,y)\),并从 \(x\) 出发沿着唯一路径到达 \(y\) . 小L是共价大爷的…
题目大意: 传送门 给一颗动态树,给出一些路径并动态修改,每次询问一条边是否被所有路径覆盖. 题解: 先%一发myy. 开始感觉不是很可做的样子,发现子树信息无论维护什么都不太对…… 然后打开题目标签……随机化…… emmmm,突然想到[bzoj 3569]DZY loves Chinese II…… 随机大法好… 给每条路径随机一个权值,然后用异或来统计子树权值和,并与全集的异或和做下比较,然后就是LCT大板子…… 板子写挂……wa了两遍……迷. 代码: #include "bits/stdc…
题目 维护一颗动态树,并维护一个点对集合 \(S\) . 动态查询一条边,是否被集合中所有点对构成的路径包含. \(n \le 100000, m \le 300000\) 题解 orz 前辈 毛爷爷. 一个很有意思的 trick . 如果一条边,被一条路径包含,那么两个端点分别存在与这条边对应的两个子树内. 我们就可以利用这个巧妙的性质来做了. 我们每次给两个端点异或上一个随机的权值,然后就可以每次查询这条边对应的任意一颗子树内所有点异或和 \(res\) ,如果 \(res\) 不等于前面所…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHwAAAJZCAIAAABUW7XHAAAgAElEQVR4nOy93cstx5Xm2f9TXh2EOe…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ207.html 题解 第一次听说 LCT 还可以维护子树信息. 首先对于每一条路径 rand 一个值,分别放在两个端点上,于是询问一条边是否被所有路径的经过就变成了询问某一边所代表的子树是否包含所有路径的端点各一次.于是我求出子树 xor ,并与当前所有路径值的 xor 比较是否相同就可以判断了. 于是接下来就变成了 LCT 维护子树 xor . 考虑在 LCT 的时候,再对于每一个节点维护其虚儿子的信…
题目链接 题目描述 火车司机出秦川,跳蚤国王下江南,共价大爷游长沙.每个周末,勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个 \(n\) 个点 \(n−1\) 条边的无向图,点编号为 \(1\) 到 \(n\),任意两点间均存在恰好一条路径,显然两个点之间最多也只会有一条边相连.有一个包含一些点对 \((x,y)\) 的可重集合\(S\),共价大爷的旅行路线是这样确定的:每次他会选择 \(S\) 中的某一对点 \((x,y)\),并从 \(x\) 出发沿着唯一路径到达 \(…
[UOJ207]共价大爷游长沙(Link-Cut Tree,随机化) 题面 UOJ 题解 这题太神了 \(\%\%\%myy\) 看到动态的维护边很容易的想到了\(LCT\) 然后能否堵住一条路 我们也不难想到,以这条路的一个端点为根的子数 是否恰好包含了集合中所有点对的中的恰好一个点 但是怎么算恰好包括了一个点... 不会呀... \(\%\%\%myy\)神奇的随机算法 对于每个点对, 就给这两个点随便随机一个点权 维护子树异或和 这样就可以检查子树异或和是否恰好和所有权值的异或和相等 把随…
「UOJ207」共价大爷游长沙 解题思路 : 快速判断两个集合是否完全相等可以随机点权 \(\text{xor}\) 的思路可以用到这道题上面,给每一条路径随机一个点权,维护出经过每一条边的点权的 \(\text{xor}\) 值判断是否和全集相等即可. 因为要支持删边加边操作,可以用一棵 \(\text{lct}\) 来维护.对于删边,相当于是原来经过这条边的路径要改为从新的树上的那条路径经过,那只要将原有的 \(\text{xor}\) 值修改过去即可. /*program by mango…
题目描述 给出一棵树和一个点对集合S,多次改变这棵树的形态.在集合中加入或删除点对,或询问集合内的每组点对之间的路径是否都经过某条给定边. 输入 输入的第一行包含一个整数 id,表示测试数据编号,如第一组数据的id=1,样例数据的 id 可以忽略.输入的第二行包含两个整数 n,m,分别表示图中的点数,以及接下来会发生的事件数,事件的定义下文中会有描述.初始时 S 为空.接下来 n−1 行,每行两个正整数 x,y,表示点 x 和点 y 之间有一条无向边.接下来 m 行,每行描述一个事件,每行的第一…
http://uoj.ac/problem/207 (题目链接) 题意 给出一棵无根树,4种操作:在路径集合中加入一条路径,在路径集合中删除一条路径,删一条边加一条边,查询一条边是否被集合中所有路径经过. Solution 将路径端点同时异或上一个值,那么如果一条路径被经过,那么它的子树中点的异或和一定等于所有路径的异或和. 考虑如何用LCT维护这种可加减的子树信息. 对于询问,我们将询问的点access一下,那么它的所有虚儿子就是它在真实的树中的所有儿子了. 对于会使轻重边切换的操作:acce…
题目传送门 http://uoj.ac/problem/207 题解 如果是一棵静态的树,有一个非常容易想到的算法:统计一下目前的每一个条边被几条路径经过,如果 \(x\) 到 \(y\) 的边的这个值为 \(|S|\) 的话,那么就是合法的. 但是如果树是动态的,这个算法就有问题了. link 和 cut 会导致一个点对之间的路径发生改变. 考虑到如果 \(x\) 到 \(y\) 这条边必须要被经过的话,那么就是说覆盖了 \(x\) 到 \(y\) 这条边的路径集恰好是 \(S\). 回顾 b…
UOJ sol 这题真是太神啦! 对于S集合中的每个点对,给他们随机附上一个相同权值. 两个点在边(x,y)的两侧当且仅当一个点在x的子树中,另一个点不在x的子树中(假设x是y的儿子) 维护一下子树点权异或和,若x子树的异或和等于所有点对权值的异或和就说明(x,y)是一条必经边 splay终于使用正常方法写 祭 这种算法是可以卡的吧... code #include<cstdio> #include<algorithm> #include<ctime> using na…
题面 UOJ Sol 神题 给每个点对随机一个权值,把这两个点的权值异或上这个随机的值 用\(LCT\)维护子树信息,若子树异或和为所有点对的异或和那么就是答案 大常数代码 # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long ll; const int…
这个题目的关键就是判断 大爷所有可能会走的路 会不会经过询问的边. 某一条路径经过其中的一条边, 那么2个端点是在这条边的2测的. 现在我们要判断所有的路径是不是都经过 u -> v 我们以u为根节点, 如果所有的路劲的起点 有且仅有一个点在 v 的子树内 我们就可以知道这个边是合法的. 那么我们每次增加路劲之后, 都在2个端点都亦或上某一个值, 每次判断的时候都判断这个v的子树内整颗树的亦或和是不是等于整体亦或和.如果是 那就说明合法. 现在我们用lct维护这个树. 在这个地方我们需要用lct…
话说我可能还没有调出魔法森林呢...说好的lct第一题呢... 又是一个随机化的方法,毕竟又是判定性的问题 上次是判断无向图联通 这次是判断一些路径是否经过一条定边 若把路径上的边全部异或上一个路径的权值 只要判断这条边的权值是否是所有路径的权值异或和就没了 lct维护链上异或和就好了 #include<bits/stdc++.h> #define MAXN 100010 #define MAXM 300010 #define ll long long using namespace std;…
这道题思路方面就不多讲了,主要是通过这题学一下lct维护子树信息. lct某节点u的子树信息由其重链的一棵splay上信息和若干轻儿子子树信息合并而成. splay是有子树结构的,可以在rotate,access的时候由儿子update到父亲,而轻儿子的信息update不上来,需要另外记一下. 记sum[x]为我们要求的子树信息,xu[x]为x的轻儿子的子树信息. (即,xu[x]由轻儿子的sum更新,sum[x]由xu[x]和splay子树上的儿子的sum更新. 这样我们就可以完整地用lct维…
有些题目,在要求支持link-cut之外,还会在线询问某个子树的信息.LCT可以通过维护虚边信息完成这个操作. 对于LCT上每个节点,维护两个两sz和si,后者维护该点所有虚儿子的信息,前者维护该点的所有信息和. 那么显然有:$si[x]=\sum sz[pson]$,$sz[x]=sz[lson]+sz[rson]+si[x]+v[x]$. 其中pson是虚儿子,lson,rson是LCT上的实儿子,v是节点本身的信息. 那么,考虑在哪些操作下需要更新这两个值. 1.access  每次将旧虚…
这是一篇关于LCT的总结 加删边的好朋友--Link Cut Tree Link-Cut Tree,LCT的全称 可以说是从树剖引出的问题 树剖可以解决静态的修改或查询树的链上信息:那如果图会不断改变,怎么办? 然后就有了LCT(真不知道发明它和它的那些拓展用法的人是怎么想出来的,创造力真强) LCT要做的就是在不断的加边.删边等等改变图的操作中维护树的信息 不得不说,它很强大 本篇随笔只是记录一下自己对使用LCT的心得,如果你想从头开始学习LCT,可以去这里-- LCT总结+题单+洛谷P369…
Link-Cut-Tree Tags:数据结构 ##更好阅读体验:https://www.zybuluo.com/xzyxzy/note/1027479 一.概述 \(LCT\),动态树的一种,又可以\(link\)又可以\(cut\) 引用:http://www.cnblogs.com/zhoushuyu/p/8137553.html 二.题目 初步 [x] P2147 [SDOI2008]Cave 洞穴勘测 https://www.luogu.org/problemnew/show/P214…
LCT题单(自己的做题情况反馈)(转自Flash) 随时进Flash Hu的LCT看一发 也可以看一下我自己的风格的板子 开始 维护链信息(LCT上的平衡树操作) [X] 洛谷P3690 [模板]Link Cut Tree https://www.luogu.org/problemnew/show/P3690 [ ] 洛谷SP913 QTREE2 - Query on a tree II https://www.luogu.org/problemnew/show/SP913 [X] 洛谷P320…
这是两个月前写的,看能不能搬运过来…… 动态树是一类维护森林连通性的问题(已纠正,感谢ZQC巨佬),目前最(wo)常(zhi)见(hui)的动态树就是LCT(Link-Cut-Tree),然而LCT似乎是处理路径的,处理子树可能力不足.据说有一种称为Top Tree的数据结构,可以处理所有.但是学不动了OrzLCT中最主要的是Access操作,Access(u)操作的含义是,从当前的节点u向他所在的根节点连一条重路径,这是相当于把沿路的重路径全都断开,重新拉一条从u到根的重路径.makeroot…
考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗煜翔-宁波市镇海中学 上升/下降阶乘幂 差分和和式 差分类似求导:和式类似积分 下降幂多项式与下降幂级数 考虑如何计算两个下降幂多项式的乘积 如何处理下降幂多项式的点值? 下降幂级数在自然数处收敛,在其他数位置基本不收敛 点值的数量大概是阶乘级别的,考虑点值的指数生成函数 那么我们选取自然数生成点值.关于点值…
[问题描述] 火车司机出秦川跳蚤国王下江南共价大爷游长沙.每个周末勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个…
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--概念篇戳这里 题单 灰常感谢XZY巨佬提供的强力资磁!(可参考XZY巨佬的博客总结) 题单对于系统地学习一个知识点还是有好处的. 所以蒟蒻搜集了各处的LCT题目(其实作为近年新兴的知识点,现有的好题不是很多,有些题树剖也可做) 大概按细化分类进行整理(类比下面的几个细化知识点,会有重复的列举) 同一类中的题目也大概按难度递增吧(太弱了,对每个题的难度定位或许有不准的地方,欢迎讨论!) 维护链信…
LCT维护子树并没有想象中的那么难,在这里只是复习下. (其他的维护子树的题目,可见:“共价大爷游长沙”) 只要记录下虚边连接的信息就好了. #include<bits/stdc++.h> #define N 100010 typedef long long ll; using namespace std; int n,q,ans,tot,num; struct Link_Cut_Tree{ ],fa[N],size1[N],size2[N],q[N],top,rev[N]; inline v…
模板题P3690 基础题P3203[HNOI2010]弹飞绵羊 \(access\)是搞出一条端点为\(x,y\)的路径 , 且维护的是实子树的信息 . 由于题目比较简单 , \(access\)时还不需要更改其它信息 [NOI2014]魔法森林 每条边有两个权值\(x_i,y_i\) , 在图上求一条 1 到 n 的路径 , 使得\(max\{x_i\}+max\{y_i\}\)最小 . 以\(y\)这一维排序依次加边 , 用\(LCT\)维护一条路径上\(x\)这一维的最大值 . 如果形成环…
本篇博客的题单转载自FlashHu大佬的博客:LCT总结--应用篇(附题单)(LCT). 关于\(LCT\)可以查看这篇博客:\(LCT\)入门. 这里面有些题解的链接是空链接,尚未补全. 维护链信息 [已\(AC\)][洛谷3690][模板]Link Cut Tree(\(LCT\)入门) [已\(AC\)][洛谷3203][HNOI2010] 弹飞绵羊(分块题解) [已\(AC\)][洛谷1501][国家集训队] Tree II(题解) [已\(AC\)][洛谷2486][SDOI2011]…
这是一份 \(\rm LCT\) 入门总结. 关于 \(\rm LCT\) 的复杂度这里不会提及,只会记录 \(\rm LCT\) 的基本操作和经典例题,但神奇的 \(\rm LCT\) 虽然常数巨大但还是 \(O(n \log n)\) 的优秀复杂度. UPD on 2021.7.1 : 复杂度证明可以参考 这里 \(\rm Link-Cut-Tree\) 又名动态树,顾名思义他能支持动态维护树的形态即支持加边删边,那么这样一个神仙数据结构是怎样工作呢? 首先类似于树剖的思想,我们将原树剖分成…