笔记
文章平均质量分 70
yl-9
这个作者很懒,什么都没留下…
展开
-
牛客挑战赛57:C-树上行走(树剖)
题目链接题意题解先树剖,设 a[x]a[x]a[x] 向父节点传递次数记为 c[x][0]c[x][0]c[x][0](树状数组即可),a[x]a[x]a[x] 向子节点(子节点是一条链上的子节点)传递次数记为 c[x][1]c[x][1]c[x][1]。那么还存在非链上的子节点,用 ans[x]ans[x]ans[x] 记录,即当 xxx 向上跳的时候,ans[f[tp[x]]]+=a[tp[x]];ans[f[tp[x]]]+=a[tp[x]];ans[f[tp[x]]]+=a[tp[x]];原创 2022-02-20 18:18:48 · 551 阅读 · 3 评论 -
Codeforces-1625D:Binary Spiders(Trie树优化DP)
题目链接题意给出 nnn 个整数,选出尽可能多的数,被选出的数必须满足两两异或不小于 kkk题解首先要知道 nnn 个数中任选 222 个数异或的最小值一定等于:将这 nnn 个数排序后,所有相邻 222 个数的异或值中的最小值。如何证明呢?我只需要证明从 nnn 个数中取任意 333 个正整数 a,b,c(a<b<c)a,b,c (a<b<c)a,b,c(a<b<c) (等于的情况不需考虑),均满足 a⨁b<a⨁ca⨁b<a⨁ca⨁b<a⨁c原创 2022-02-20 18:00:02 · 238 阅读 · 3 评论 -
树状数组--简单讲解
C[1]=A[1];C[1]=A[1];C[1]=A[1];C[2]=A[1]+A[2];C[2]=A[1]+A[2];C[2]=A[1]+A[2];C[3]=A[3];C[3]=A[3];C[3]=A[3];C[4]=A[1]+A[2]+A[3]+A[4];C[4]=A[1]+A[2]+A[3]+A[4];C[4]=A[1]+A[2]+A[3]+A[4];C[5]=A[5];C[5]=A[5];C[5]=A[5];C[6]=A[5]+A[6];C[6]=A[5]+A[6];C[6]=A[5]+.原创 2022-01-14 21:29:43 · 72 阅读 · 0 评论 -
网络最大流-Dinic算法
问题描述给定 nnn 个点,mmm 条有向边,给定每条边的容量,求从点 sss 到点 ttt 的最大流。推荐博客反向边作用bfsbfsbfs分层优化-Dinic网络流其他更强优化算法思路反向边的反悔作用:以上为 FFFFFF 算法,DinicDinicDinic 使用 bfsbfsbfs 分层优化:bfsbfsbfs 分层,使每次增广只能从当前层流向下一层,避免 dfsdfsdfs 寻找增广路使乱跑增加复杂度(正确性:只要能流向汇点必然存在增广路,必然能分层;最后止于没有增广路)df原创 2021-12-14 00:04:19 · 465 阅读 · 0 评论 -
Tarjan 算法
解决问题Tarjan 算法是图论中非常实用 / 常用的算法之一,能解决强连通分量(有向图两点互打),双连通分量(任意两点存在至少两条"边不重复"的路径的图),割点和桥,求最近公共祖先(LCA)等问题。求强连通分量一些定义搜索树:以某一个节点 x 出发进行深度优先搜索,每一个节点只访问一次,所有被访问过的节点与边构成一棵树时间戳 dfndfndfn :标记图中每个节点在进行深度优先搜索时被访问的时间顺序追溯值 lowlowlow :搜索树中 dfndfndfn 最小值有视频好理解算法思想处原创 2021-11-26 16:28:23 · 656 阅读 · 0 评论 -
拉格朗日(Lagrange)插值
问题给定 nnn 个点,可确定一个多项式 y=f(x)y=f(x)y=f(x) ,要求确定这个多项式并求出 f(k)f(k)f(k)拉格朗日(Lagrange)插值公式搬运令 Ln(x)=f(x)L_n(x)=f(x)Ln(x)=f(x)n=1有由点斜式可以得到其中这里 lk(x)l_k(x)lk(x) 和 lk+1l_{k+1}lk+1 称作线性插值基函数。n=2有构造易得一般情况Ln(x)=l0(x)∗y0+l1(x)∗y1+l2(x)∗y2+...原创 2021-11-19 18:56:43 · 1493 阅读 · 0 评论 -
二分图-匈牙利&KM算法
匈牙利算法问题解决二分图最大匹配问题。思想不断寻找原有匹配 MMM 的增广路径以增大匹配数。对每次匹配左边点 xxx,不断通过右边点 yyy 跳到左边 yyy 的对象点 x∗x*x∗,直至 xxx 右边点 yyy 没有对象。代码模板#include<bits/stdc++.h>#define pb push_backusing namespace std;const int N=509;int n,m,e,ans;int vis[N],t[N];vector<i原创 2021-11-12 19:35:51 · 407 阅读 · 0 评论 -
多区间选点,之和一定
问题描述有多个区间 [l,r][l,r][l,r] ,在每个区间选一个点使得各点之和为 XXX思路每个区间选一个点组成的 xxx 的范围为 [[[ ∑i=1nli\sum_{i=1}^{n}{l_i}∑i=1nli , ∑i=1nri\sum_{i=1}^{n}{r_i}∑i=1nri ]]],若所求 XXX 在此区间则可达而后从后往前反推求出一组解步骤lil_ili rir_iri X=10X=10X=101 31 52 31. 令 Li=L_i=Li= ∑j=1il原创 2021-11-08 21:40:06 · 98 阅读 · 0 评论 -
凸包-笔记
思路1. 先找到左下角点,根据该点给其他点按极角排序bool cmp(Pdb x,Pdb y) //按极角排序 { DB b=atan2(x.se-a[1].se,x.fi-a[1].fi); DB c=atan2(y.se-a[1].se,y.fi-a[1].fi); if(b!=c) return b<c; if(x.fi!=y.fi) return x.fi<y.fi; return x.se<y.se;}2. 将前两个先加入栈中,对后面每个,根据叉积判断当前栈原创 2021-11-08 21:09:48 · 106 阅读 · 0 评论 -
高斯消元-异或版
题目2020icpc济南-A-Matrix Equation思路矩阵 A 与答案每列乘积异或和互不干扰,故对每列分别求解,等式右边化为 0找到当前处理的未知数为 1 的行,交换,对之后该未知数为 1 的行整行异或,化为上三角求出解代码#include<bits/stdc++.h>#define LL long long#define mod 998244353using namespace std;const int N=209;int n;LL ans=1LL;LL原创 2021-11-07 21:21:53 · 569 阅读 · 0 评论 -
高斯消元-基础版
思想将矩阵化为上三角后从下向上求出每个解步骤1. 每次找到最大系数行(减小误差)1 -8/7 10/7 34 -5 6 121 -2 3 62. 将该系数化为11 -8/7 10/7 34 -5 6 121 -2 3 63. 将后面行该列系数化为01 -8/7 10/7 30 -3/7 2/7 00 -6/7 11/7 34. 经过 nnn 此操作矩阵化为一个上三角,从 nnn 行回代求解每个未知数代码例题:P3389 【模板】高斯消元法#include<原创 2021-11-07 21:09:25 · 130 阅读 · 0 评论