摘要: 057.拓扑排序 拓扑排序 有向无环图 可以判断环 流程 找到所有入度为0的点 将入度为0的点删除,它所指向的点的入度减1 重复,直到所有点都被删除 如果无法删除所有点,说明存在环 const int N=1e5; vector<int>gra[N]; int in[N]; void top(int n){ for( 阅读全文
posted @ 2026-01-22 01:24 射杀百头 阅读(1) 评论(0) 推荐(0)
摘要: 056.最短路算法 链式前向星 空间复杂度 O(N + M) const int N=1e5+5; const int M=1e5+5;//无向图要用2倍的M int tot; int head[N]; int nex[M]; int to[M]; int weight[M]; void built(int n){ t 阅读全文
posted @ 2026-01-21 16:38 射杀百头 阅读(1) 评论(0) 推荐(0)
摘要: 055.多层图最短路(扩点) 扩点最短路,也叫分层图最短路 建图的节点不是真实的位置,而是真实位置+在此处的状态 一般还要用到状态压缩技巧 核心在于如何扩点,如何到达,如何算距离 习题 01 获取所有钥匙的最短路 leetcode 864 节点表示状态 : 真实位置 + 已获取的钥匙 钥匙状态压缩,二进制下对应位的1,0表示该钥 阅读全文
posted @ 2026-01-21 00:25 射杀百头 阅读(2) 评论(0) 推荐(0)
摘要: 054.Dijkstra模板+反向索引堆优化 + 经典题目 Dijkstra BFS + 贪心(priority_queue) 加权有向图 不能处理负权 Dij(普通堆) O ( M * logM ) M : 边数 const int N=1e5+5; const int INF=0x3f3f3f3f; vector<pair<int,int>>gra[N] 阅读全文
posted @ 2026-01-20 23:21 射杀百头 阅读(2) 评论(0) 推荐(0)
摘要: 053.最小生成树 最小生成树的特征 无向带权图 n 个节点, n-1 条边 所有节点连通 边权和最小 最小生成树一定是最小瓶颈树 最小生成树可能不止一棵 模板 luogu P3366 kruskal 对边排序 并查集避免成环(并查集记得初始化) 选 n-1 条边 O(n+m)+O(m*logm) const int 阅读全文
posted @ 2026-01-19 21:13 射杀百头 阅读(4) 评论(0) 推荐(0)
摘要: 052.堆结构与堆排序 堆结构 编号 在数组上模拟完全二叉树 对于下标为i的节点 父节点为 (i-1)/2 左孩子为 2*i + 1 右孩子为 2*i + 2 根节点编号为0,这样就会发现根节点的父节点就是(0-1)/2 = 0自己 大根堆,小根堆 大根堆的每一个子结构的最大值都在堆顶 小根堆的每一个子结构的最小值都在堆顶 阅读全文
posted @ 2026-01-19 21:12 射杀百头 阅读(4) 评论(0) 推荐(0)
摘要: 051.并查集 模板0 class UF{ private: vector<int>fa; public: UF(int n):fa(n){ for(int i=0;i<n;++i){ fa[i]=i; } } int find(int x){ if(x!=fa[x]){ fa[x]=find(fa[x]); } 阅读全文
posted @ 2026-01-19 00:10 射杀百头 阅读(2) 评论(0) 推荐(0)
摘要: 050.等差数列差分 等差数列 首项 s 末项 e 共差 d 等差数列差分 在区间[l,r]上加上一个等差数列 知道了区间长度,根据 e - s = d * (r - l) 对于s,e,d我们可以知二求三 对于原始数组a[]={0,0,0,0,0,0,0} 在[1,4]加上一个等差数列s=5,d=2,e=11 我们希望得 阅读全文
posted @ 2026-01-18 11:28 射杀百头 阅读(2) 评论(0) 推荐(0)
摘要: 049.二维差分 一维差分 对于原始数组a[] 通过d[i]=a[i]-a[i-1]初始化出d[]差分数组 对差分数组进行若干次修改 // 在[l,r]上加k void change(int l,int r,int k){ d[l]+=k; d[r+1]-=k; } 最后update得到最终的a[] void upd 阅读全文
posted @ 2026-01-18 10:57 射杀百头 阅读(3) 评论(0) 推荐(0)
摘要: 048.扫描线 + 线段树 矩形面积并 luogu P5490 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=3e5+5; struct rectangle{ int x1,y1,x2,y2; }rec[N/2]; 阅读全文
posted @ 2026-01-17 11:17 射杀百头 阅读(3) 评论(0) 推荐(0)