首页 > TAG信息列表 > ybtoj
YbtOJ 「数学基础」第6章 期望问题
既然被提醒了不要咕咕咕那就先写一点(? 不过过几天估计就又咕啦。 深刻体会到了写完几道题统一补博客的难受。 期望题 LaTeX 好难打诶可能写得简略点qaq 例题1.单选错位 emmm 好像没啥可说(? code #include<bits/stdc++.h> using namespace std; const int N=1e7+5; int n,A,B,C,a[NYbtOJ 「图论」第3章 最短路径
例题1.单源最短路径 dij 板子。(w36557658 原版 dij 代码! code #include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define fi first #define se second using namespace std; typedef lybtoj 12F
求值的话改为求解前缀和的值,通过两个前缀和相减即可得到每个值。 每次询问相当于给一个方程。 一共有 $n$ 个未知数,因此需要 $n$ 个方程,同时每个数都必须至少在方程中出现一次。 最小生成树求解即可。 输入看不懂 /kel。YbtOJ 「图论」第2章 最小生成树
为什么区间 dp 又咕咕咕了QAQ 于是随机抽取了一个幸运章节来做。 目前处于半摆烂状态。 例题1.繁忙都市 板子。写了下以前几乎没写过的堆优化 Prim。 code #include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second using namespace std; const iYbtOJ 「基础算法」第3章 二分算法
例题1.数列分段 二分每段和的最大值。check 时从左往右扫,如果当前段的和大于限制则新开一段。 code #include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,m,a[N]; int maxn,s; int check(int x) { int cnt=1,sum=0; for(int i=1;i<=n;i++) { if(sum+a[iYbtOJ 递推算法 做题记录
例题 1 错排问题 \(f_i\) 表示前 \(i\) 个数的错排。易得递推式为 \(f_i=(i-1)\times(f_{i-1}+f_{i-2})\)。 code #include<bits/stdc++.h> #define int long long using namespace std; int n,f[25]; signed main() { scanf("%lld",&n); f[1]=0,f[2]=1; for(int i=YbtOJ「图论」第1章 二分图匹配 J. 祭祀 题解--zhengjun
思路 考虑处理出原 dag 图的两两点之间能否可达(可用 Floyd),然后题中是求最大的若干点之间没有两两可达的点对。 那么建出二分图之后,发现如果出现一对匹配,那么相当于这两个点里面有一个不能选了,所以答案就是总的点数-最大匹配。 代码 #include<bits/stdc++.h> using namespace std;tYbtOJ「图论」第1章 二分图匹配 K. 男孩女孩 题解--zhengjun
思路 会发现要求一个最大的完全子图(每个点两两之间有连边),所以考虑把建出原图的反图,然后每个点两两之间有连边就转化成为了每个点两两之间没有连边,也就是二分图的最大独立子集,是需要用总点数-最大匹配即可。 代码 #include<bits/stdc++.h> using namespace std;typedef long long lCF700E Cool Slogans / YbtOJ「字符串算法」第3章 后缀自动机 G. 重复子串 题解--zhengjun
题目大意 选出一个字符串序列 \(s\),使得对于每一个 \(s_i\),都是原串的子串,且每个 \(s_i\) 在 \(s_{i-1}\) 中都出现过至少两次,求最大的序列长度。 思路 发现其实可以做到让所有选出的字符串都是上一个字符串的后缀,因为如果后面留了一个尾巴,那么前面的字符串把这个尾巴砍了是不影响【YBTOJ进阶训练指导】星星问题【树状数组】
思路: 一道经典的二维偏序 c o d e code code #include<iostream> #include<cstdio> #include<algorithmYbtOJ-序列计数【组合数学,莫队】
正题 题目大意 求有多少个长度在\(l,r\)之间,值域是\([1,n]\)的严格上升子序列 \(1\leq T,n\leq 10^5,1\leq l\leq r\leq 10^5\) 解题思路 先转换成两个前缀和的差,那么相当于我们要快速求 \[\sum_{i=0}^m\binom{n}{i} \]的值。 考虑到我们有组合数恒等式\(\binom n m=\binom{n-1}YbtOJ-连通的图【结论,线性基】
正题 题目大意 给出\(n\)个点\(n+k-1\)条边的一张图,求有多少种删除若干条边的方案使得图依旧联通。 \(1\leq n\leq 10^5,1\leq k\leq 10\) 解题思路 注意到\(k\)很小,我们考虑先搞出一棵\(dfs\)树然后剩下的做非树边。 这里有个结论是,我们将第\(i\)条非树边权值定为\(2^i\),树边权【YBTOJ进阶训练指导】出栈序列【模拟】【贪心】
思路: 字典序最大,所以直接贪心每次出栈的是最大 c o d e code code #include<iostream> #include<cstdio>Ybtoj #735. 「动态树」毒瘤染色
题面传送门 奇妙的被强制套上LCT的二合一。 首先考虑加边怎么做。看到仙人掌想到建圆方树,由于强制在线考虑用LCT维护。每次加入先看路径上有没有方点,如果有则不能加入,如果没有则看有没有成环,如果不成环直接加入,否则将环断开并新建立方点,并将环上所有点连向方点。就可以维护加边操【YBTOJ进阶训练指导】求f函数 【递推】
思路: 直接按题目要求递推即可 c o d e code code #include<iostream> #include<cstdio> using namespaceYbtOJ-毒瘤染色【LCT】
正题 题目大意 开始时有一张\(n\)个点没有边的图,\(q\)次操作加入一条边,如果加入后图是一个沙漠(只有边仙人掌的图)时才能够加入。 每次加入后询问:开始所有点都是白色,\(k\)次随机挑一个点染黑,求最后白色点的连通块数和黑色点的连通块数的和。 强制在线 \(1\leq n\leq 10^5,1\leq q\lYbtOJ-森林之和【dp】
正题 题目大意 一个节点的权值定义为它度数的平方,求所有 n n n个点的有标号森林的所有节点权值和。 1 ≤YbtOJ-森林之和【dp】
正题 题目大意 一个节点的权值定义为它度数的平方,求所有\(n\)个点的有标号森林的所有节点权值和。 \(1\leq n,T\leq 5\times 10^3\) 解题思路 首先因为所有节点本质相同,所以我们可以只考虑一个节点所有情况下的权值和。 然后考虑这个平方和怎么做,我们可以视为指定一个节点连出两Ybtoj #891. 「高斯消元」生日礼物
题面传送门 如果设\(f_{i,j}\)为当前位置要不要取反,那么显然可以列出\(nm\)个方程。 直接解方程是\(O(\frac{n^3m^3}{w})\)的显然过不去。 考虑每个方程的项数很少,所以可以主元法。具体的,令前两行和第一列为变量,则每个位置\((i,j)\)都可以用\((i-2,j-1)\)位置的等式表达出来,这样每Ybtoj #644. 「平衡树」模糊序列
题面传送门 考虑普通LIS其实除了树状数组还有另外一个二分栈做法。 考虑仿照二分栈设\(dp_i\)为长度为\(i\)的LIS的最小的最后一个数。 如果来了一个区间\([l,r]\),那么找到在f上对应能转移的区间\([l',r']\) 则发现对应的操作是加入一个数,删除一个数,区间加\(1\),二分,可以用一个平衡Ybtoj #534. 「后缀数组」跳蚤的串
题面传送门 最大值最小显然想到二分。 因为答案肯定是原序列的一个子串,所以直接二分这个子串在本质不同子串中的排名即可。 因为已经预处理了SA,所以在check的时候倒叙,显然一个后缀中字典序最大的串是最长的子串,所以倒叙以后,如果当前点的字典序大于二分的字典序,那么这个位置和上一YbtOJ-变量观测【鸽笼原理】
正题 题目大意 有\(n\)个数字开始都是\(0\),要求有\(q\)次操作。 新建一个观测员,观测其中的\(k\)个数,当这\(k\)个数从此刻开始变化量不小于\(t\)时观测结束。 将第\(i\)个数加\(v\),并输出此时观测结束的观测员编号。 强制在线 \(1\leq n,q\leq 2\times 10^5,1\leq k\leq 3,1\leq【YBTOJ】线性筛素数
思路: 无( c o d e code code #include<iostream> #include<cstdio> using namespace std; long lo【YBTOJ】序列的第k个数
思路: 分类讨论 c o d e code code #include<iostream> #include<cstdio> using namespace std; lon【ybtoj 高效进阶 1.2】 【贪心】 最大积分
【ybtoj 高效进阶 1.2】 【贪心】 最大积分 题目 解题思路 同一件物品等级高时卖出贡献更大 那么给物品的贡献值排个序 按贡献值从小到大卖出 代码 #include<algorithm> #include<iostream> #include<cstdio> using namespace std; struct lzf{ long long k,v; }a[120];