YbtOJ
ssllyr
锦瑟无端五十弦,一弦一柱思华年。
展开
-
【ybtoj遗物题集】
YBTOJ原创 2022-08-02 20:48:10 · 51 阅读 · 0 评论 -
【ybtoj 5.2 区间DP课堂过关】A.石子合并
题目链接:http://noip.ybtoj.com.cn/contest/52/problem/1分析区间DP经典题,枚举区间长度,端点,就可以得到另一个端点,然后枚举区间分割点,就可以转移。所有大区间的答案都依赖于小区间,要先枚举长度。这个环怎么处理?倍长之后正常做。转移:f[l][r]=max/min(f[l][r],f[l][k]+f[k+1][r])f[l][r]=max/min(f[l][r],f[l][k]+f[k+1][r])f[l][r]=max/min(f[l][r],f[.原创 2021-08-23 22:02:02 · 84 阅读 · 0 评论 -
【ybtoj 5.1 背包问题课堂过关】E.金明的预算方案【有依赖背包】
题目链接:http://noip.ybtoj.com.cn/contest/50/problem/5分析分开主件和附件,因为最多有两个附件,所以只有5种情况:啥都不买只买主件主件+附件1主件+附件2主件+附件1+附件2找几个数组分别存主件,附件1,附件2。转移:枚举每件物品,枚举背包容量。方程:f[j]=max(f[j],f[j−v[i]]+v[i]∗q[i]);f[j]=max(f[j],f[j-v[i]]+v[i]*q[i]);f[j]=max(f[j],f[j−v[i]]+v.原创 2021-08-21 11:59:05 · 106 阅读 · 0 评论 -
【ybtoj 5.1 背包问题课堂过关】C.宝物筛选【完全背包】
题目链接:http://noip.ybtoj.com.cn/contest/50/problem/3分析这道题本意是要打一个二进制拆分优化的完全背包的,但是我把完全背包交上去加了个break小优化就过了。洛谷上面最后一个点死活过不了,打个表爆切。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,d[100001],v[100001],.原创 2021-08-21 11:44:34 · 63 阅读 · 0 评论 -
【ybtoj 5.1 背包问题课堂过关】B. 货币系统【完全背包】
题目链接:http://noip.ybtoj.com.cn/contest/50/problem/2分析把货币系统(n,a)(n,a)(n,a)看做集合A,(m,b)(m,b)(m,b)看做集合B,那么A集合不能表示出来的数必然在B集合内。考虑完全背包,从小到大排序,看看能否被之前的数表示出来。其实最新的等价最小系统就是原来的数量减去所有能被原系统内的数表示出来的数。例如:6=3+3,19=10+3+3+3。转移方程:f[j]=f[j]∣(f[j−a[i]])f[j]=f[j]|(f[j-a[..原创 2021-08-17 16:02:03 · 59 阅读 · 0 评论 -
【ybtoj 5.1 背包问题课堂过关】A. 采药问题【01背包】
题目链接:http://noip.ybtoj.com.cn/contest/50/problem/1分析01背包模板题。设f[i]f[i]f[i]为背包容量为iii时的最大价值。从大到小枚举背包的空间,如果够放iii物品就判断一下是否最大,如果是当前的最大就放进去,后面会继续更新。答案是f[t]f[t]f[t]上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace.原创 2021-08-17 15:37:50 · 64 阅读 · 0 评论 -
【ybtoj 4.5 倍增问题课堂过关】【洛谷P2680】E.运输计划【树上差分】
题目链接:gmoj,洛谷分析最大值最小,可以二分。二分答案,然后判断的时候把所有大于midmidmid值的路径记录下来,找出被所有这样路径覆盖的最长的道路。如果没有这样的道路 false;如果这样的道路被减去之后依然大于mid false ,找出被所有路径覆盖的道路。在树中将所有路径起、始权值+1,LCA权值-2,从所有叶节点往上累加,最终权值为路径数的点到其父亲的边为所求边 dis[i]dis[i]dis[i]表示i到根的距离;t[i]t[i]t[i]表示iii这个点通往父亲的边,目的是记录..原创 2021-08-14 11:41:46 · 83 阅读 · 0 评论 -
【ybtoj 4.5 倍增问题课堂过关】【洛谷P1967】D. 货车运输【LCA+最大生成树】
题目链接:洛谷、ybtoj分析当两个城市可以互相到达的时候,最优路线一定位于原图的最大生成森林上。这题是LCA经典应用:静态树上链的权值查询问题。dis[i,j]dis[i,j]dis[i,j]表示从iii出发向上走2j2^j2j步的所有点的边权最小值。转移:dis[i,j]=min(dis[i,j−1],dis[f[i,j−1],j−1])dis[i,j]=min(dis[i,j-1],dis[f[i,j-1],j-1])dis[i,j]=min(dis[i,j−1],dis[f[i,j−1],.原创 2021-08-13 10:51:14 · 67 阅读 · 0 评论 -
【ybtoj 4.4 倍增课堂过关】A.查找编号
题目链接:查找编号分析跟二分查找是一样的,倍增缩小答案区间。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,a[2000010];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(in.原创 2021-08-13 08:32:08 · 94 阅读 · 0 评论 -
【ybtoj 4.5 倍增问题课堂过关】C.树上距离【LCA】
题目链接:树上距离分析倍增求LCA,预处理fafafa数组的时候顺便求根节点到所有点的距离dis。然后ans=dis[x]+dis[y]−2∗dis[lca(x,y)]ans=dis[x]+dis[y]-2*dis[lca(x,y)]ans=dis[x]+dis[y]−2∗dis[lca(x,y)](x到根的距离+y到根的距离-两倍LCA到根的距离)上代码#include<iostream>#include<cstdio>#include<algorithm&.原创 2021-08-13 10:36:06 · 64 阅读 · 0 评论 -
【ybtoj 4.4 线段树课堂过关】【洛谷P4513】C.小白逛公园【维护树】
题目链接:ybtoj、洛谷题目大意求一段序列的最大子段和,并随时在线修改查询。分析对于线段树的每个节点维护几个信息:s,mx,lx,rxs,mx,lx,rxs,mx,lx,rx。分别代表区间和,区间最大子段和,从区间左端点开始的最大子段和,到区间右端点结尾的最大子段和。如果用k表示当前区间,lson,rsonlson,rsonlson,rson表示左右区间,可以得到转移公式:s[k]=s[lson]+s[rson]s[k]=s[lson]+s[rson]s[k]=s[lson]+s[rson..原创 2021-08-10 21:58:47 · 59 阅读 · 0 评论 -
【ybtoj 4.4 线段树课堂过关】B. 区间查改【模板】
线段树原创 2021-08-10 21:42:31 · 93 阅读 · 0 评论 -
【ybtoj 4.4 线段树课堂过关】A. 求区间和【模板】
题目链接:求区间和分析线段树模板单点修改+区间查询。上代码我写的build纯属练手。。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;ll n,m,tree[300001];ll ans;void build(int k,int l,int r){ if(l==r) { tree[k]=0;.原创 2021-08-10 21:38:11 · 45 阅读 · 0 评论 -
【ybtoj 4.3 RMQ课堂过关】D. 矩阵最值【二维ST表】
题目链接:矩阵最值分析二维ST表模板题。一维扩展一下就可。上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int n,m,q;int a[300][300],f[300][300][20][20];void prest(){ for(int i=1;i<=n;i++) { for(in.原创 2021-08-09 10:53:39 · 79 阅读 · 0 评论 -
【ybtoj 4.3 RMQ课堂过关】C.与众不同【st表】【二分】
RMQ原创 2021-08-08 21:39:40 · 90 阅读 · 0 评论 -
【ybtoj 4.3 RMQ课堂过关】B.静态区间【RMQ】
题目链接:静态区间分析其实跟数列区间这题是一样的,只需要把预处理的最值改成gcd就可以。上代码#include<iostream>#include<cstdio>using namespace std;int n,a[50001],m,lg[50001],f[100001][20];int gcd(int x,int y){ if(x%y==0) return y; else return gcd(y,x%y);}int main(){ cin&.原创 2021-08-08 21:26:25 · 65 阅读 · 0 评论 -
【ybtoj 4.3 RMQ课堂过关】A.数列区间【RMQ模板】
题目链接:数列区间分析RMQ模板。st表预处理出i−i+2ji-i+2^ji−i+2j的最大值,然后设k=log2(x−y+1)k=log2(x-y+1)k=log2(x−y+1)最后输出查询两段长为2k的序列最值(可以重叠)上代码cin什么东西啊真是lj#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;in.原创 2021-08-08 21:10:00 · 75 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】F. 矩阵修改矩阵查询
题目链接:矩阵修改矩阵查询分析又是矩阵修改,参照D题,可以使用二维差分。后面维护出现次数中出现的四个情况即可。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;int n,m;ll c[3001][3001],c1[3001][3001],c2[3001][3001],c3[3001][3001];i.原创 2021-07-29 17:12:30 · 136 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】E.单点修改矩阵查询
题目链接:单点修改矩阵查询分析模板题,二维树状数组维护前缀和(与二维前缀和一样)。单点修改就分别从(x,y)枚举到(1,1)。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;int n,m;ll c[5001][5001];int lowbit(int x){return x&(-x);}.原创 2021-07-29 17:09:00 · 124 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】D.区间修改区间查询
题目链接:区间修改区间查询分析上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;int n,q;ll c[1000001],c1[1000001];int lowbit(int x){return x&(-x);}void update(ll x,ll y){ for(int i=x;..原创 2021-07-29 17:04:55 · 43 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】C.严格上升子序列数
题目链接:严格上升子序列数分析普通的DP:设di,jd_{i,j}di,j为以第iii个数结尾,长度为jjj的严格上升子序列个数。转移显然。时间复杂度O(Tn2m)O(Tn^2m)O(Tn2m)不能通过。优化:将数组离散化,建立m个树状数组维护长度为1~m的方案数。复杂度O(Tnm∗logn)O(Tnm*logn)O(Tnm∗logn)上代码#include<iostream>#include<cstdio>#include<algorithm>#.原创 2021-07-29 17:01:04 · 73 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】B.逆序对【树状数组+离散化】
题目链接:逆序对分析暴力的算法是O(n2)O(n^2)O(n2)的。因为范围比较大,所以要将数组离散化先。每次在树状数组下标为a[i]的位置+1,然后统计下标大于a[i]的区间的个数。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;struct lwx{ int s,p;}a[500005];.原创 2021-07-29 16:53:40 · 76 阅读 · 0 评论 -
【ybtoj 4.2 树状数组课堂过关】A.单点修改区间查询
题目链接:单点修改区间查询分析树状数组模板。区间查询只要像前缀和查询区间一样。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;ll n,q,a[1000001],c[1000001];int lowbit(int x){ return x&(-x);}void update(int ..原创 2021-07-29 16:48:41 · 46 阅读 · 0 评论 -
【ybtoj 4.1 二叉堆课堂过关】D.工作安排【小根堆】
题目链接:工作安排分析先把所有工作按截止时间排序,如果时间充足就做,不足就留下利润高的。很显然的贪心。用小根堆维护工作的截止时间和利润。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct lwx{ int d,p;}a[100001];long long n,mx,len,tree[200001];int cmp(lwx l..原创 2021-07-29 12:23:13 · 60 阅读 · 0 评论 -
【ybtoj 4.1 二叉堆课堂过关】C.龙珠游戏【大根堆】
题目链接:龙珠游戏分析因为要字典序最大,所以前面的数尽量大。利用堆快速找出最大的编号和位置。链表维护i之后最靠前的没被取走的龙珠的位置。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct lwx{ int s,p;}tree[100001];int n,a[100001],next[100001],len,v[100001];..原创 2021-07-29 12:19:29 · 56 阅读 · 0 评论 -
【ybtoj 4.1 二叉堆课堂过关】B.序列合并【小根堆】
题目链接:序列合并分析因为这些序列都是有序的,所以每次比较最小的两个队头,如果一个队头被用过,那下一个就成为新的队头。求最小可以用小根堆优化,将一开始所有队头放入堆中,每次取最小。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct lwx{ int x,y,s;}tree[200001];int n,a[100001],b.原创 2021-07-29 12:14:11 · 73 阅读 · 0 评论 -
【ybtoj 4.1 二叉堆课堂过关】A.合并果子【小根堆】
题目链接:合并果子分析很明显是每次合并两个最小的。维护一个小根堆,每次取出两个最小的,将他们的和记录并放回堆。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,tree[30001],len,ans;void put(int x){ tree[++len]=x;//加到最后 int son=len;//当前位置 whil..原创 2021-07-29 12:10:02 · 48 阅读 · 0 评论 -
【ybtoj 3.2 最小生成树课堂过关】D.构造完全图【kruskal】
题目链接:构造完全图分析记录每个连通块的节点数,kruskal,合并时统计答案上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct lwx{ int x,y,d; }a[100001];long long n,fa[100001],siz[100001];int father(int k){ if(fa[k]==k) r.原创 2021-07-12 08:49:18 · 54 阅读 · 0 评论 -
【ybtoj 3.2 最小生成树课堂过关】C.公路建设【kruskal优化】
题目链接:公路建设分析kruskal求最小生成树然后算费用上代码#include<iostream>#include<cstdio>#include<iomanip>#include<algorithm>using namespace std;int n,m;int fa[501];struct lwx{ int x,y,z;}a[2001];int father(int x){ if(fa[x]==x) retu..原创 2021-07-12 07:52:37 · 86 阅读 · 0 评论 -
【ybtoj 3.2 最小生成树课堂过关】B.新的开始【prim】
题目链接:新的开始分析prim模板题设0号为超级电源,所有点都要直接或间接与0号相连。求最小花费即可。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,ans;int v[301],dis[301],a[301][301];int main(){ cin>>n; for(int i=1;i<=n;i++) .原创 2021-07-12 07:45:00 · 49 阅读 · 0 评论 -
【ybtoj 3.2 最小生成树课堂过关】A.繁忙都市【kruskal】
题目链接:繁忙都市分析最小生成树模板题上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,ans,fa[1000010];struct lwx{ int u,v,c;}a[1000001];bool cmp(lwx l,lwx r){ return l.c<r.c;}int father(int x){ .原创 2021-07-12 07:40:17 · 84 阅读 · 0 评论 -
【ybtoj 3.4 强连通分量课堂过关】B.受欢迎的牛【tarjan】
题目链接:受欢迎的牛分析根据喜欢关系建图。任意一个强连通分量里面的牛都互相喜欢,于是就用tarjan缩点,然后将多个强连通分量又构成一个DAG成为明星的条件就是出度为0。·不止一个的话就没有牛能成为明星。上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,ans;int dfn[10001],low[10001],col[10001].原创 2021-07-12 07:30:11 · 54 阅读 · 0 评论 -
【ybtoj 3.4强连通分量课堂过关】A.有向图缩点 【tarjan】【DP】【拓扑】
tarjan原创 2021-07-11 21:14:23 · 79 阅读 · 0 评论 -
【ybtoj 3.1】E.超市购物【并查集+贪心】
题目链接:超市购物分析使用贪心算法给价格排序,如果一个货物被选中,其他的就推到第二天并查集实现这个操作上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,fa[100001];struct lwx{ int p,d;}a[100001];int cmp(lwx a,lwx b).原创 2021-07-11 18:54:47 · 83 阅读 · 0 评论 -
【ybtoj 3.1】【noi2001】D.食物链【并查集】
题目链接:食物链分析把猎物,天敌都放在一个并查集中,x+nx+nx+n表示天敌x+2nx+2nx+2n表示猎物然后再去查找上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int n,k,ans;int fa[150001];int father(int.原创 2021-07-11 18:54:22 · 103 阅读 · 0 评论 -
【ybtoj 3.1】F.逐个击破【并查集+贪心】
题目链接:逐个击破分析反过来想,要把k个城市连成多个并查集,每个并查集只能有一个城市,怎样花费最多。排序+贪心做法上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;int n,k,fa[100005],b[1000005];ll ans; struct lwx{ int u,v,w;}a[50000.原创 2021-07-14 14:25:28 · 73 阅读 · 0 评论 -
【ybtoj 3.1】【NOI2002】C.银河英雄传说【并查集】
分析用s表示当前序列有多少战舰,用a表示当前战舰前面有多少战舰上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int t,a[30001],fa[30001],s[30001];int father(int x){ if(fa[x]==x) return.原创 2021-07-11 18:54:06 · 59 阅读 · 0 评论 -
【ybtoj 3.1】B.约束条件【并查集】
本题原名“程序自动分析”分析离散化+并查集上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int t,n,d[1000001],fa[1000001];struct lwx{ int x,y,z;}a[1000001];int cmp(lwx a,lwx b){ return a.z&原创 2021-07-09 14:53:42 · 147 阅读 · 0 评论 -
【ybtoj 3.1】A.并查集模板【并查集】
题目链接:并查集模板上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int n,m,fa[1000001];int father(int x){ if(fa[x]==x) return x; else return father(fa[x]);}void hb(int x,int y)//..原创 2021-07-09 14:50:22 · 43 阅读 · 0 评论 -
【ybtoj 高效进阶 2.4】D.阅读理解【trie】
题目链接:阅读理解分析又是一道模板题上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring> using namespace std;int n,m;short v[600001][1001];//只能用short,不然会爆 int trie[600001][27],tot=1;void in(string s,int t){ int ..原创 2021-07-09 14:45:18 · 70 阅读 · 0 评论