摘要: 在hzoi混了一段时间,被踢出来学文化课了。 博客全部搬自我的洛谷博客,目前还没有写新的https://www.luogu.com.cn/blog/18733952089ckb/ 目前想浅学一下python,以后可能会写关于python的博客 这些博客只是我自学的一些总结,可能会有一些疏漏,请大家在 阅读全文
posted @ 2022-05-13 09:46 Chano_sb 阅读(100) 评论(7) 推荐(2) 编辑
摘要: 背包问题九讲 目录 第一讲 01背包问题 这是最基本的背包问题,每个物品最多只能放一次 第二讲 完全背包问题 第二个基本的背包问题模型,每种物品可以放无限多次。 第三讲 多重背包问题 每种物品有一个固定的次数上限。 第四讲 混合三种背包问题 将前面三种简单的问题叠加成较复杂的问题。 第五讲 二维费用 阅读全文
posted @ 2022-05-13 09:38 Chano_sb 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 树形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 阅读全文
posted @ 2022-05-13 09:37 Chano_sb 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 观光旅游 题目描述 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观。学校认为大力发展旅游业,可以带来一笔可观的收入。 描述 Description 学校里面有N个景点。两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度;否则它们之间没有直接的道路相连。这里所说的道路是没有规 阅读全文
posted @ 2022-05-13 09:36 Chano_sb 阅读(37) 评论(0) 推荐(1) 编辑
摘要: LIS(Longest Increasing Subsequence)即最长上升子序列 给定一个序列,LIS是指其所有上升子序列中最长的一个 举个例子a={100,98,300,385,200,166}其最长上升子序列为{100,300,385} 朴素dp求法O(n*n) 算法描述 f[i]指以i为 阅读全文
posted @ 2022-05-13 09:35 Chano_sb 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 一、什么是图的最小生成树(MST) N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。 一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。 二、最小生成树用来解决什么问题? 阅读全文
posted @ 2022-05-13 09:35 Chano_sb 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 阿Q的密室 https://hszxoj.com/images/211012_w8wh3kPF4a.png 12.18.2021唯一一道A掉的题 分析题意可知,每组中的密室可以相互到达,则密室中至少有n-1条边,可以用最小生成树算法。 Prim (关于全机房就我一个用Prim这件事) Prim是基于 阅读全文
posted @ 2022-05-13 09:33 Chano_sb 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序 阅读全文
posted @ 2022-05-13 09:33 Chano_sb 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 树状数组 利用二进制的一些性质使得区间修改、区间查询效率达到log的数据结构 lowbit lowbit(x)求出二进制x中末尾的1 公式:lowbit(x)=x&-x; 举个例子: 计算时用补码,正数的补码是其原码,负数的补码是反码+1 14(00001110) &-14(11110010) __ 阅读全文
posted @ 2022-05-13 09:32 Chano_sb 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 重载小于号错误的写法 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 阅读全文
posted @ 2022-05-13 09:31 Chano_sb 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 无向图求割边 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 阅读全文
posted @ 2022-05-13 09:28 Chano_sb 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 图片来自蒟蒻的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 阅读全文
posted @ 2022-05-13 09:28 Chano_sb 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 针对一个序列进行区间操作,假设[l,r]都加上data 令差分数组d[i]为a[i]-a[i-1](原数组),则操作完成之后差分数组中只有两个,量改变,d[l]+data,d[r+1]-data。 另外,根据定义,显然有d[1--r]前缀和为原来的元素a[r]。利用这种性质,树状数组完成了区间修改, 阅读全文
posted @ 2022-05-13 09:27 Chano_sb 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 板子 求区间最值 while(!q1.empty() && q1.back().data>=a[i])q1.pop_back(); //队列中的元素单调递增,如果当前元素比队尾元素大就无法保证单调性,应该弹出 q1.push_back((element){a[i],i});//插入元素 } for( 阅读全文
posted @ 2022-05-13 09:26 Chano_sb 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 莫队 分块 是一种暴力结构 给定一个序列a,q个询问,求区间[L,R]权值和。 显然树状数组,线段树等结构都可做 没有学习它们的时候我们是如何解决这个问题的? 前缀和 那么再加上更新 如果不借助上述数据结构只能暴力维护 for(int i=l;i<=r;++i)a[i]+=data; for(int 阅读全文
posted @ 2022-05-13 09:24 Chano_sb 阅读(36) 评论(0) 推荐(0) 编辑
摘要: Martix,即矩阵,是线性代数中的一个重要内容。 定义(摘自oi-wiki): 对于矩阵 A ,主对角线是指 A[i][i] 的元素。 一般用 I 来表示单位矩阵,就是主对角线上为 1,其余位置为 0。 运算: 加减法是逐个元素进行的 我们规定:矩阵乘法只有在第一个 阅读全文
posted @ 2022-05-13 09:22 Chano_sb 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 用来求解n元一次线性方程组 核心思想: 把方程组塞到一个矩阵里得到一个nn+1的矩阵,第i行表示第i个方程,Mat[i][j]表示第i个方程中xj的系数 Mat[i][n+1]为一个常数,即等号右面的常数 把xi的系数都集中于第i行(对角线上),xi为当前选 阅读全文
posted @ 2022-05-13 09:22 Chano_sb 阅读(72) 评论(1) 推荐(0) 编辑
摘要: P8266 分析题意可以打一个很显然的O(n2)暴力 丑陋的赛时代码 70pts 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 阅读全文
posted @ 2022-05-13 09:21 Chano_sb 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 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){ 阅读全文
posted @ 2022-05-13 09:20 Chano_sb 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 倍增求LCA 错误的dfs 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); } 阅读全文
posted @ 2022-05-13 09:14 Chano_sb 阅读(26) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示