随笔分类 - high school
摘要:# 状压dp ## 位运算 有 `#define ui unsigned int` `1u` 是获取一个类型为 `ui` 的 $1$ 一般来说 认为 `unsigned` 比 `signed` 在为运算上更快 **左移/右移** ```cpp ui left(ui x,int pos){ retur
阅读全文
摘要:# 随机化 ## rand(c++98) 在 `Linux` 下 范围 $[0,2^{31})$ 在 `Windows` 下 范围 $[0,2^{15})$ 更大范围建议 `functoin getrand()=rand()` 中 假设有 `a[]` 用法 `random_shuflle(a+a.b
阅读全文
摘要:```cpp #include #define ll long long const int N=100050; using namespace std; ll n,m,init[N],mod; struct node{ll l,r,v,add,mul;}t[N>1; build(p=t[p].r)
阅读全文
摘要:T1 ```cpp #include #include const int MOD=20200920,N=5050; #define ll long long #define ENDL putchar('\n') using namespace std; int n; ll ans[N]; void
阅读全文
摘要:### LCA **最近公共祖先** #### 倍增 在线算法 时间复杂度 $O((n+q)\log\ n)$ 空间复杂度 $O(n \log n)$ `fa[x][k]` 表示 $x$ 的 $2^k$ 祖先 `dep[x]`表示 $x$ 的深度 `log[x]`表示 $log_2\ x$ ```C
阅读全文
摘要:### 乘法逆元 ### 快速幂 仅对模数 $p$ 为质数时适用 跑的没有用 exgcd 求的快 ```cpp int query(int x) { return ksm(x,p-2,p); } int ksm(long long x,int n,int p) { int re=1; while(n
阅读全文
摘要:### 树状数组 #### 单点修改 区间查询 修改 查询复杂度 $O(log \ n)$ ```cpp int lowbit(x) { return x&-x; } void add(int x,int k) { while(x<=n) { tree[x]+=k; x+=lowbit(x); }
阅读全文
摘要:### 快速幂 ```cpp int ksm(long long x,int n,int p) { int re=1; while(n) { if(n&1) re*=x%p; x*=x%p; n>>=1; } return re; } ```
阅读全文
摘要:### 堆 #### STL `include` `priority_queue q;` 大根堆 `priority_queue,greater > q;` 小根堆 #### 手写 ~~然而并不比stl快~~ ```cpp int heap[MAX],size; void _push(int v)
阅读全文
摘要:### 并查集 合并 查询的效率很高 可以近似看作 $O(1)$ ~~在不加路径压缩的极端情况下会退化成一条链 例如csp-s 2019 ccf 的并查集代码~~ ```cpp void init() { for(int i=1;i<=n;i++) f[i]=i; } void Union(int
阅读全文
摘要:### ST表 可以用来静态求解RMQ问题 预处理 $O(n\ log \ n)$ 查询 $O(1)$ ```cpp void pre_st() { for(int j=1;j>1]+1; } int query(int l,int r) { int t=log[r-l+1]; return max
阅读全文
摘要:#### 题意: 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目
阅读全文
摘要:#### 题意: 给出 $N$ 个点,每个点指向一个其它点的,求从每个点开始,第二次访问一个节点时走的步数 #### 解析: Tarjan ```cpp #include #include #define N 100005 using namespace std; struct Edge{int n
阅读全文
摘要:#### 题意: 给出一棵有 $N$ 个节点的树,节点编号 $0$ ~ $N-1$ 。如果在一个节点上放置一个士兵,那么该节点及与该节点相连的所有节点都可以被瞭望到。求瞭望到所有节点所需的最少的士兵数。 #### 解法: 树形dp 设 $f[i][j]$ = 节点 $i$ 选($j=1$)不选($j
阅读全文
摘要:#### 题意: 给出一棵树,编号 $1$ ~ $N$ 和每个节点上的快乐值 $R[i]$ 。如果一个节点的父节点被选中,那么这个节点就不能选了。求最大快乐值。 ~~写博客的时候才注意到输入格式有一条 **最后一行输入0 0**,貌似没有任何用处~~ #### 解法: 树形dp 记忆化搜索 设 $f
阅读全文
摘要:#### 题意: 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。 #### 解法: 一道欧拉回路的模板题。将每个字母两两之间连一条无向边,然后求欧拉回路(保证字典序最小)。 ```cpp #inc
阅读全文
摘要:#### 题意: 给出一张有 $n$ 个点, $m$ 条边的无向图 ,有 $b$ 点血量。 每个点上有一个点权 $f[i]$ ,表示经过这个点需要交 $f[i]$ 的费用。,每条边上有一个边权 $C[i]$ ,表示经过这条边需要扣除 $C[i]$ 的血量 求能从起点 $1$ 到达 $n$ 的情况下交
阅读全文
摘要:#### 题意: 求源点到所有点的最短路和所有点到源点的最短路之和 #### 解法: 反向建图,跑两次从源点开始的最短路 数据比较大,==spfa无法跑过==,需要dijkstra //结果都比较大,需要开long long ~~就是UVA721的翻译版~~ ```cpp //double exp
阅读全文
摘要:### Floyd 复杂度$O(n^3)$ 可以求解多源最短路 本质上是dp `f[i][j]` 表示从 $i$ 点到 $j$ 点只允许经过前 $k$ 号点的最短路 ```cpp for(int k=1;kdis[i][k]+w[k][j]) dis[i][j]=dis[i][k]+w[k][j];
阅读全文
摘要:#### 题意: 有体积 $V$ 的背包,对于一个物品 $i$ ,有体积 $v[i]$ ,求保证把背包装满的方案数,保证合法。 #### 解法: 背包dp ```cpp #include #include using namespace std; int main() { int n,m,w[100
阅读全文

浙公网安备 33010602011771号