05 2022 档案
摘要:在hzoi混了一段时间,被踢出来学文化课了。 博客全部搬自我的洛谷博客,目前还没有写新的https://www.luogu.com.cn/blog/18733952089ckb/ 目前想浅学一下python,以后可能会写关于python的博客 这些博客只是我自学的一些总结,可能会有一些疏漏,请大家在
阅读全文
摘要:背包问题九讲 目录 第一讲 01背包问题 这是最基本的背包问题,每个物品最多只能放一次 第二讲 完全背包问题 第二个基本的背包问题模型,每种物品可以放无限多次。 第三讲 多重背包问题 每种物品有一个固定的次数上限。 第四讲 混合三种背包问题 将前面三种简单的问题叠加成较复杂的问题。 第五讲 二维费用
阅读全文
摘要:树形dp 代码中f数组的空间是有点浪费的,f[maxn][5]即可 f[i][0]以i为根节点的子树i自己守卫自己 f[i][1]以i为根节点的子树i父亲守卫自己 f[i][2]以i为根节点的子树i儿子守卫自己 #include<bits/stdc++.h> #define ll long long
阅读全文
摘要:观光旅游 题目描述 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观。学校认为大力发展旅游业,可以带来一笔可观的收入。 描述 Description 学校里面有N个景点。两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度;否则它们之间没有直接的道路相连。这里所说的道路是没有规
阅读全文
摘要:LIS(Longest Increasing Subsequence)即最长上升子序列 给定一个序列,LIS是指其所有上升子序列中最长的一个 举个例子a={100,98,300,385,200,166}其最长上升子序列为{100,300,385} 朴素dp求法O(n*n) 算法描述 f[i]指以i为
阅读全文
摘要:一、什么是图的最小生成树(MST) N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。 一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。 二、最小生成树用来解决什么问题?
阅读全文
摘要:阿Q的密室 https://hszxoj.com/images/211012_w8wh3kPF4a.png 12.18.2021唯一一道A掉的题 分析题意可知,每组中的密室可以相互到达,则密室中至少有n-1条边,可以用最小生成树算法。 Prim (关于全机房就我一个用Prim这件事) Prim是基于
阅读全文
摘要:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序
阅读全文
摘要:树状数组 利用二进制的一些性质使得区间修改、区间查询效率达到log的数据结构 lowbit lowbit(x)求出二进制x中末尾的1 公式:lowbit(x)=x&-x; 举个例子: 计算时用补码,正数的补码是其原码,负数的补码是反码+1 14(00001110) &-14(11110010) __
阅读全文
摘要:重载小于号错误的写法 sturct node{ int id,dis; bool operator<(node x)const{ return x.dis<dis; } } 正确的写法 sturct node{ int id,dis; bool operator<(node x)const{ ret
阅读全文
摘要:无向图求割边 inline void Tarjan(int u,int fa){ dfn[u]=low[u]=++Time; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].to; if(!dfn[v]){ Tarjan(v,u); low[u]=m
阅读全文
摘要:图片来自蒟蒻的blog ST表 一个可以解决RMQ(区间最值问题)的数据结构,相比于线段树O(nlogn)初始化之后,查询只需要O(1),适用于没有更新,查询较多的题目 void init_St(){ for(int i=1;i<=n;++i){ h[i][0]=num[i]; g[i][0]=nu
阅读全文
摘要:针对一个序列进行区间操作,假设[l,r]都加上data 令差分数组d[i]为a[i]-a[i-1](原数组),则操作完成之后差分数组中只有两个,量改变,d[l]+data,d[r+1]-data。 另外,根据定义,显然有d[1--r]前缀和为原来的元素a[r]。利用这种性质,树状数组完成了区间修改,
阅读全文
摘要:板子 求区间最值 while(!q1.empty() && q1.back().data>=a[i])q1.pop_back(); //队列中的元素单调递增,如果当前元素比队尾元素大就无法保证单调性,应该弹出 q1.push_back((element){a[i],i});//插入元素 } for(
阅读全文
摘要:莫队 分块 是一种暴力结构 给定一个序列a,q个询问,求区间[L,R]权值和。 显然树状数组,线段树等结构都可做 没有学习它们的时候我们是如何解决这个问题的? 前缀和 那么再加上更新 如果不借助上述数据结构只能暴力维护 for(int i=l;i<=r;++i)a[i]+=data; for(int
阅读全文
摘要:Martix,即矩阵,是线性代数中的一个重要内容。 定义(摘自oi-wiki): 对于矩阵 ,主对角线是指 的元素。 一般用 来表示单位矩阵,就是主对角线上为 1,其余位置为 0。 运算: 加减法是逐个元素进行的 我们规定:矩阵乘法只有在第一个
阅读全文
摘要:用来求解n元一次线性方程组 核心思想: 把方程组塞到一个矩阵里得到一个的矩阵,第行表示第个方程,表示第个方程中的系数 为一个常数,即等号右面的常数 把的系数都集中于第行(对角线上),为当前选
阅读全文
摘要:P8266 分析题意可以打一个很显然的暴力 丑陋的赛时代码 void work(){ n=read(),m=read(),k=read(); for(int i=1;i<=m;++i){ int x=read();vis[x]=1; } for(int i=1;i
阅读全文
摘要:https://www.luogu.com.cn/blog/styx-ferryman/xian-duan-shu-ge-bing-zong-ru-men-dao-fang-qi?tdsourcetag=s_pcqq_aiomsg %%% 权值线段树的一些操作 int getrank(int x){
阅读全文
摘要:倍增求LCA 错误的 void dfs(int u,int fa){ dep[u]=dep[fa]+1; f[u][0]=fa; for(int i=head[u];i;i=e[i].next){ int v=e[i].to; if(v==fa)continue; dfs(v,u); }
阅读全文
摘要:看到这么个东西赛时想用莫队,但是打假了,所以就有了下面这个不三不四的代码 也就是很裸的暴力 void Push(int st,int ed){ for(int i=st;i<=ed;++i){ while(!q.empty()){ Pair tmp=q.back(); if(tmp.a == dat
阅读全文
摘要:Chen_jr's blog ko no SB da!!! 单调队列优化dp 对于方程 f[i]=min(f[j]+b[j]+a[i]) i-m<j<i 其中a,b为只与i和j有关的函数 显然可以转化为 f[i]=min(f[j]+b[j])+a[i] i-m<j<i 可以考虑用单调队列优化 以mi
阅读全文
摘要:A 排座位 没有任何难度的大水题 想复杂了。如果只能是两个相邻的位置交换自然要求逆序对,但是这个题可以随便换,所以我们乱搞。最终的目标就是把 换到第一个位置, 换到第二个位置,以此类推 如果 就不操作,如果 且 \(da
阅读全文
摘要:阿Q的棒棒糖 https://hszxoj.com/images/211012_AxTB6T3Ym2.png 题意很简单:给定一棵树,删掉一条边之后得到两棵树,求两棵树的最大直径和 朴素算法:枚举要删去的边,分别以边的起点和终点为起点跑dfs,处理出树上最长链和次长链,直径为最长链和次长链的加和;
阅读全文
摘要:算法介绍: SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。 算法流程: 算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松
阅读全文