LCT模板(指针版)】的更多相关文章

模板 :  #include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream> #include<algorithm> using namespace std; ; struct Trie { Trie *Next[maxn]; int v; inline void init(){ ; ; i<maxn; i++) this->Next[i] = NUL…
本来是想做THUWC2017的泰勒展开xLCT题的-- 然后觉得数组写很麻烦-- 然后就决定挑战指针版-- 然后写得全是BUG-- 与BUG鏖战三千年后,有了这个指针版LCT板子! #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <iostream> #define space putchar(' ') #define ente…
题面 传送门 题解 鉴于数组版实在是太慢我用指针版重新写了一遍 代码基本是借鉴了lxl某道关于\(LCT\)的题 //minamoto #include<bits/stdc++.h> #define R register #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1277 推荐一篇博客(看思路就可以,实现用的是java): https://www.cnblogs.com/nullzx/p/7499397.html 这是一道模板题,拿来练手,之前看了一篇博客,有点错误,但是hdu上面居然过了,最主要的是我在hdu上面三道AC自动机模板题都是这个错的代码,居然都过了,害的我纠结了一晚上,原来是数据太水了. 主要还是看上面的博客,写了点注释,不一定对,以后好拿来复习.…
之前一直用的LCT模板,因为其实个人对LCT和Splay不是很熟,所以用起来总觉得略略的坑爹,过了一段时间就忘了,但事实上很多裸的LCT要改的东西是不多的,所以今天写了些注释,以后可能套起模板来会得心应手一点吧- -0 #pragma warning(disable:4996) #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <vec…
这一个月貌似已经考了无数次\(LCT\)了..... 保险起见还是来一发总结吧..... A. LCT 模板 \(LCT\) 是由大名鼎鼎的 \(Tarjan\) 老爷发明的. 主要是用来维护树上路径问题的. 它的神奇之处在于可以直接把一条路径抠出来维护. 其实就是维护树链剖分中的重链与轻链. 网上相关教程很多,直接给板子(其实是我懒得打E_E) 0. Splay代码: \(LCT\)是以\(Splay\) 为实现基础的: IL bool Son(RG int x){return ch[fa[x…
传送门 看了一圈,好像真的没什么用指针的呢.. 明明觉得指针很好看(什么??你说RE???听不见听不见) 其实我觉得用数组的话不RE直接WA调起来不是更困难嘛,毕竟通过gdb还可以知道哪里RE,WA就不知道咋回事了,是不是很有道理,虽然我还是调了几小时 我写的是fhq treap,核心是split和merge操作,思想高赞dalao都讲得很清楚,我语文弱渣就不班门弄斧了,主要是想提供一个指针版的参考吧QAQ 我真的是一整天都在搞分裂(split),有种要进入七月枪毙名单的赶脚,慌张.jpg #i…
传送门 这是一道LCT的板子题,说白了就是在LCT上支持线段树2的操作. 所以我只是来存一个板子,并不会讲什么(再说我也不会,只能误人子弟2333). 不过代码里的注释可以参考一下. Code #include<bits/stdc++.h> using namespace std; typedef unsigned int uint; ; ; inline int read(){ ,w=;; while(!isdigit(ch)) w|=ch=='-',ch=getchar(); )+(x&l…
P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的. 1:后接两个整数(x,y),代表连接x到y,若x到y已经联通则无需连接. 2:后接两个整数(x,y),代表删除边(x,y),不保证边(x,y)存在. 3:后接两个整数(x,y),代表将点x上的权值变成y. 输入输出…
由容器PStash的使用者,负责清除容器中的所有指针.所以用户必须记住放到容器中的是什么类型,在取出时,把取出的void指针转换成对应的类型指针,然后 'delete 转换后的对象指针',才能在清除时调到对象的析构函数. 析构函数的作用: 确保对象的各部分被正确的清除,及做一些用户指定的其他清理工作. 1 头文件PStash.h #ifndef PSTASH_H #define PSTASH_H class PStash { int capacity; int next; void** stor…
ORZ原创Clove学姐: 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),size[i]表示包括i的这个子树的大小:sz为整棵树的大小,root为整棵树的根. 再介绍几个基本操作: [clear操作]:将当前点的各项值都清0(用于删除之后) [get操作]:判断当前点是它父结点的左儿子还是右儿子 inline int get(int x…
网上一片一片的LCT都是数组写的 orz 用指针写splay的人想用指针写LCT找板子都不好找QAQ 所以能A题了之后自然要来回报社会, 把自己的板子丢上来(然而根本没有人会看) LCT讲解就省省吧, 我这种蒟蒻也基本讲不清楚, 就扔个板子算了 板子里也没什么注释, 因为函数的命名和世界的主流命名规范是一样的.. 那就这样吧.. 贴两道题的板子. 第一个是SDOI2008 Cave洞穴勘测, 一道简单判断连通性的LCT裸题. 三种操作; 连x,y 保证连完还是棵树 断x,y 保证<x,y>边存…
题意: 看题. 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿 着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置, 则绵羊被弹飞.绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞.为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何 时候弹力系数均为正整数. n<=20w. SO…
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径.洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通…
·伸展树有以下基本操作(基于一道强大模板题:codevs维护队列): a[]读入的数组;id[]表示当前数组中的元素在树中节点的临时标号;fa[]当前节点的父节点的编号;c[][]类似于Trie,就是一个邻接表,存储左右儿子编号;sum[]区间和:size[]当前根节点所在区间的大小;v[]节点权值;mx[]当前区间连续和最大值;rx[]当前区间右端点连续和最大值lx[]当前区间左端点连续和最大值;rev[]区间反转的LAZY操作;tag[]区间整体赋值修改的LAZY操作; ①“旋学”:旋转操作…
推荐几篇比较好的博客: FlashHu 的 讲解比较好 : 传送门 Candy 的 代码~ : 传送门 以及神犇Angel_Kitty的 学习笔记: 传送门 Code V 模板 #include<cstdio> #include<cstring> #include<algorithm> #define rd read() #define ll long long using namespace std; ; ; int n, m; int read() { , p =…
一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) using namespace std; #define maxn 40000 struct LCT { #define…
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technician.cpp: source.cpp: 5员工管理案例-销售和经理实现 修改employee.h: displayStatus不用虚函数了 salesman.h: salesman.cpp: manager.h: manager.cpp: 6员工管理案例-销售经理的实现 7 中午回顾 注意: 多继承…
Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和. 保证x到y是联通的. 1:后接两个整数(x,y),代表连接x到y,若x到Y已经联通则无需连接. 2:后接两个整数(x,y),代表删除边(x,y),不保证边(x,y)存在. 3:后接两个整数(x,y),代表将点X上的权值变成Y. Input 第1行两个整数,分别为N和M,代表点数和操作数. 第2行…
最近学习了一波LCT qwq 强势安利Flashhu的博客!!!!! 真的特别详细(可惜我不会弄链接) 如果有想要学习\(LCT\)的同学,可以直接看他的博客 我这里就简单写一点自己的体会啊. \(LCT\)大致上就是一个支持加边,删边,维护子树信息,路径修改,维护路径信息的一个数据结构 本质上LCT是一个实虚链划分 代码的话,主要是分为几个部分 首先是判断这个点是不是根 和 其儿子关系,也就是\(notroot\)和\(son\)函数 int son(int x) { if (ch[fa[x]…
一步步来,先简单点. 目标:我们要实现一个模板类,例化后,可以通过get_val获取到值,通过get_ptr获取到指针.具体什么意思结合例子来看看吧. 例子: struct A{ int data; A(int _data = 0):data(_data){} }; template <typename T> class heap_node{ public: typedef T val_type; typedef T* ptr_type; typedef T& ref_type; pt…
之前写过一篇文章,地址 http://www.cnblogs.com/Bond/p/3469798.html   大概说了下怎么通过反射来自动生成对应EasyUi datagrid的模板,然后贴了很多代码,看起来很乱,当时没用过easyui,没啥经验. 这次经过了项目的实际考验,我把它做了一些改动,在此分享下,并且附上源码,源码需要用vs2012打开,打开即可运行不要做任何设置.源码地址在 https://github.com/LittleBearBond/GenerateEasyUiDataG…
A + B Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 654986    Accepted Submission(s): 204210 Problem Description Calculate A + B.   Input Each line will contain two integers A and B.…
用LCT实现路径加,路径乘,断开及加上一条边(保证是树),查询路径和. #include <cstdio> #include <algorithm> #define l(x) t[x].s[0] #define r(x) t[x].s[1] #define f(x) t[x].f #define lc(x) (r(f(x)) == x) #define int unsigned int , p = ; ]; int n,m,x,y,c,tp,q[N]; ],sm,sz,mu,ad,…
题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[i + 1][j->next] += dp[i][j],其他思路和上一题hdu2457一样的,就是在AC自动机里跑就行了,不要遇到模式串结尾,然后最后把所有结尾求和就是答案. 注意下题目说给最多给50个字符且ASCII码大于32但是没说多大,直接开100多会RE,这里用map假装离散化一下. 参考:…
好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> #include <iostream> #define isr(A) (s[s[A].fa].ch[0]!=A&&s[s[A].fa].ch[1]!=A) using namespace std; const int maxn=10010; int n,m; struct NODE…
update:2017.09.26 #include <bits/stdc++.h> using namespace std; struct Link_Cut_Tree { + ; ], fa[MAXN], rev[MAXN], sz[MAXN]; int sk[MAXN]; bool isroot(int x) { ] != x && ch[fa[x]][] != x; } void reverse(int x) { rev[x] ^= , swap(ch[x][],ch[x…
题目:https://www.luogu.org/problemnew/show/P3690 自己竟然从没有钻研过LCT上的连通性问题! 于是被最后一个点卡了,似乎因为 find 函数只能找出连通性而不能判断有没有直接相连的边: 所以还是直接在 cut 函数里判断一下好了. (注:第9个点时T时不T的,不想去管它了.) 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace…
bzoj 2049 传送门 洛谷P2147 传送门 这个大佬的LCT详解超级棒的! Link-Cut Tree的基本思路是用splay的森林维护一条条树链. splay的森林,顾名思义,就是若干splay组成的东西. 每个splay都有一个根节点,所以lct里的splay不能记录根节点,因为根节点有好多. 我们开一个bool数组记录每个点是否为根节点. 每个splay都维护一条重链,重链之间的轻链在splay里只从儿子指向父亲,而父亲并没有这个儿子. 就像图里的红箭头. 每个splay都表示一条…
//非当前弧优化版 #include <iostream> #include <cstdio> #include <math.h> #include <cstring> #include <queue> #define INF 0x3f3f3f3f using namespace std; int tab[250][250];//邻接矩阵 int dis[250];//距源点距离,分层图 int N,M;//N:点数;M,边数 queue<…