树(Tree)
Zeolim
这个作者很懒,什么都没留下…
展开
-
[主席树单点更新区间极值动态开点][最长上升子序列] CodeForces 474 F. Pathwalks
题意:给定一张图 联通或不联通, 求最大的路径长度使得路径边号递增且权值递增其实就是 线段树/树状数组 求最长上升子序列且限制转移条件为边两点时才能转移考虑建1e5棵线段树/树状数组进行维护 下标是权值 值是以下标为结尾的lis必然爆炸,所以用主席树动态开点维护查询即可 代码瞎搞一下就行#include <bits/stdc++.h>using nam...原创 2019-10-21 20:21:37 · 251 阅读 · 0 评论 -
[DP][bitset][线段树]练习赛53 A C E
A 超越学姐爱字符串 A:超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢“c”和“y”。因此超越学姐喜欢只含有“c”和“y”的字符串,且字符串中不能出现两个连续的“c”。请你求出有多少种长度为n的字符串是超越学姐喜欢的字符串。答案对1e9+7取模。解题思路:设dp[MAXN][2] 代表第i个位置是c 或 y的情况数有dp[1][0] = dp[1][1] =1 则每...原创 2019-10-16 21:20:44 · 219 阅读 · 0 评论 -
[模板]主席树及其应用
可持久化权值线段树;root数组记录第i版本根, 每次建树时只新建当前位相关子节点, 不相关子节点直接用上一版本的原节点有前缀和及权值树性质, 可区间查询k小数1.查询区间第k小#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>...原创 2019-05-14 18:29:59 · 465 阅读 · 0 评论 -
[权值BIT] 小朋友排队
解题思路每个小朋友需要交换的次数必然是左边比他大的 + 右边比他小的用 权值BIT 维护前缀后缀再单独计算等差即可主席树应该也是可以解决的/* Zeolim - An AC a day keeps the bug away*///#pragma GCC optimize(2)#include <cstdio>#include <iostream...原创 2019-05-05 10:49:54 · 192 阅读 · 0 评论 -
[并查集] D. 0-1-Tree
You are given a tree (an undirected connected acyclic graph) consisting ofnnvertices andn−1n−1edges. A number is written on each edge, each number is either00(let's call such edges00-edges) or...原创 2019-05-09 12:45:46 · 363 阅读 · 0 评论 -
[权值线段树] 1163B2 Cat Party (Hard Edition)
题意: 给一序列串求最大x 有 x前删除一个值后每个值出现次数相同解法: B1是小范围版, 只要枚举数字就行B2用权值线段树记录最大最小出现次数, 出现n次的数有几个, 结合B1的规律(在代码里↓)写即可代码/* Zeolim - An AC a day keeps the bug away*///pragma GCC optimize(2)#includ...原创 2019-05-10 21:28:59 · 340 阅读 · 0 评论 -
[模板] 扫描线
一、扫描线求矩形面积并如图所示 总矩形面积并等于每两根蓝线间的面积和。考虑将矩形按x轴排序,只需要知道每个离散的x点上被矩形覆盖的长度, 和下一条扫描线的x轴可知之间面积为所以只需要维护每一条扫描线的长度即可,线段树暴力维护题目链接https://vjudge.net/problem/POJ-1151线段树维护const int MAXN = 1e6 + 1...原创 2019-08-13 20:42:01 · 491 阅读 · 0 评论 -
[SGT] 线段树维护区间最大子段和
蓝书P208https://vjudge.net/problem/SPOJ-GSS1若将一区间分为两部分,则必有最大子段存在于左区间 / 右区间 / 跨越中间因此当前节点记录该段的最大前缀和,最大后缀和,段和,区间内最大子段和 now.sum = ls.sum + rs.sum; now.lmax = max(ls.lmax, ls.sum + rs.lmax); now.r...原创 2019-08-09 16:03:53 · 331 阅读 · 0 评论 -
HDU 6638 Snowy Smile
离散后用线段树维护最大子段和枚举上界遍历下界更新答案时间复杂度代码:/* Zeolim - An AC a day keeps the bug away*/ //pragma GCC optimize(2)#include <bits/stdc++.h>using namespace std; #define mp(x, y) mak...原创 2019-08-16 11:14:52 · 248 阅读 · 0 评论 -
Comet OJ - Contest #9 & X Round 3 【XR-3】核心城市
题意: 给定一颗无向无根树,求一大小为K的联通子图使得非子图最远点距离子图距离最小树, 且联通考虑平均砍去部分子树使得答案最优即可所以从叶子入手一层一层往里砍, 砍几层答案是几那么需要记录信息 p[y] 为以 y 为根的子树最大深度为多少所以要找个根,当树的中心为根时 p[y]最平均所以两遍dfs求树中心即可用树中心树上dp子树最大深度,按深度遍历累加 当累加树...原创 2019-08-31 18:45:42 · 227 阅读 · 0 评论 -
[思维][RMQ] G Parenthesis
给一合法括号序列,交换xy位置的括号问交换后是否合法解题思路:左扩1右扩-1做前缀和数组当且仅到pre[i] >= 0 && pre[n] == 0时合法考虑交换, 若s[x] == s[y]交换无意义当前为'('后为')'则xy区间内差分值均要减二 所以区间极小值小于2则非法当前为')'后为'('交换后发现差分值只会变大,且原序列合法,则必然合法...原创 2019-10-07 22:27:06 · 105 阅读 · 0 评论 -
[树上DP] I 2019 P2634 [国家集训队]聪聪可可
求树上简单路径长度为2019倍数的路径条数解题思路 :二维状态dp[i][j]代表i节点的子树上所有点到i的距离为j的个数考虑两点u, v,两点间的贡献为ans += dp[u][i] * dp[v][(2019 - i - v + 2019) % 2019]; i =0 - 2018此时u的贡献会转移为dp[u][(i + val(边权)) % 2019] += d...原创 2019-10-08 20:54:07 · 201 阅读 · 0 评论 -
[LCA] 最近公共祖先
最近公共祖先求法很多, 各有优略LCA步骤及原理:例题:http://acm.hdu.edu.cn/showproblem.php?pid=2586代码:LCA倍增法DFS + 向前星版预处理DEG 为log2(n) + 1#include <bits/stdc++.h>typedef long long ll;typedef long doub...原创 2019-05-05 10:47:23 · 156 阅读 · 0 评论 -
[模板] 树状数组及其应用
树状数组树状数组又是一个区间查询修改利器 前缀和的维护 差分的维护又强又方便二进制组合原理struct bit{ ll c[MAXN], N; //c树, N数组长 bit() {} bit(int n) { N = n; fill(c, c + N + 1, 0); } //初始化数组长 int lowbit(int x) { return x &...原创 2019-04-14 18:53:26 · 155 阅读 · 0 评论 -
[数据结构] 对顶堆求中位数
中位数求法比较多 离线的我不会比较容易实现的就是 在线的对顶堆对顶堆的定义:小顶堆存 大于小顶堆堆顶 的 所有元素 大顶堆存 小于大顶堆堆顶 的 所有元素那么 小顶堆和大顶堆堆顶 就是整个 当前数据元素 的 分界线并且 堆顶对换/互相插入 不影响定义性质那么当求中位数时 只需调堆即可得益于堆的性质 每次调堆时间复杂度为log(n)1.当前总元素量为奇数时只...原创 2019-03-19 10:35:23 · 823 阅读 · 1 评论 -
[线段树] [51nod] 1174 区间中最大的数
裸线段树且只有查询基础#pragma GCC optimize(2)#include <iostream>#include <cmath>#include <iomanip>using namespace std;const int MAXN = 1e6 + 10;typedef long long ll;ll arr[M...原创 2018-08-07 10:42:40 · 185 阅读 · 0 评论 -
[线段树][ZZNUOJ]易水寒
没必要用线段树只是想练习一下#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include ...原创 2018-08-11 16:13:25 · 185 阅读 · 0 评论 -
[DP] [51nod]1086 背包问题 V2
将多重背包展开为01背包#pragma GCC optimize(2)#include <cstdio>#include <iostream>using namespace std;typedef long long ll;const int MAXN = 1e6 + 10;int volume[MAXN] = {0}, value[MAXN] =...原创 2018-08-11 17:03:08 · 194 阅读 · 2 评论 -
[洛谷] [P1305] 新二叉树
查询插入输出XJB打的非模板每次搜都搜到底 #include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstr...原创 2018-08-07 17:37:16 · 168 阅读 · 0 评论 -
[Tree] [洛谷] P1087 FBI树
建树输出#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstrin...原创 2018-08-08 16:41:57 · 273 阅读 · 0 评论 -
[Tree] [洛谷] P1030 求先序排列
先序:根左右中序:左根右后序:左右根//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>...原创 2018-08-08 18:52:16 · 245 阅读 · 0 评论 -
[线段树] [洛谷] P1531 I Hate It
线段树的区间查询和单点更新复习敲一下//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#in...原创 2018-08-19 08:40:19 · 222 阅读 · 0 评论 -
[洛谷] P2068 统计和
裸线段树//#pragma GCC optimize(2)#include <cstdio>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstrin...原创 2018-09-05 19:03:55 · 227 阅读 · 0 评论 -
牛客小白月赛8 F-数列操作 (有序表)
链接:https://www.nowcoder.com/acm/contest/214/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld题目描述clccle是个蒟蒻,她经常会在学校机房里刷题,也会被同校的dalao们虐,有一次,她想出了一个毒瘤数据结构,便兴冲冲的把题面...原创 2018-10-20 21:42:19 · 172 阅读 · 0 评论 -
[模板] 堆 heap
//进阶指南版struct HEAP{ ll heap[MAXN], len; HEAP() { memset(heap, 0, sizeof(ll) * MAXN); len = 0; } void up(int now) { while(now > 1) { if(heap[now] < heap[now / 2]) swap...原创 2018-11-01 09:57:37 · 130 阅读 · 0 评论 -
[最大权森林] [POJ] 3723 Conscription
ConscriptionTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 17473 Accepted: 6058 DescriptionWindy has a country, and he wants to build an army to protect his country...原创 2018-11-09 10:54:29 · 100 阅读 · 0 评论 -
[模板]前缀树 / 字典树及应用
前缀树 / 字典树是最简单的树了欠的总是要还的O(n)算法的多叉树比较好理解没啥解释的了用数组模拟 行结点 列指针 cnt记录最大结点编号直接上代码吧可持久化01字典树struct trie{ int cnt, root[MAXN], tr[MAXN * 25][2], sum[MAXN * 25];//结点总个数 版本进入根 树 结点...原创 2019-03-14 17:02:48 · 354 阅读 · 0 评论 -
[51NOD] 1065 最小正子段和
前缀和加SET维护 O(n + nlog(n))结果不能为零 白下了一组数据...set中的查找:set<#>iterator it = ST.lower_bound(x);#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN =...原创 2019-03-21 16:54:39 · 216 阅读 · 0 评论 -
[模板][线段树]
1.区间加和求极值lazy#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 10;typedef long long ll;const ll MOD = 1e9 + 7;const int MX = 1e5 + 7;int arr[MAXN] = {0};struct sgt...原创 2018-08-11 12:42:29 · 170 阅读 · 0 评论