随笔分类 -  图论

摘要:例题: https://ac.nowcoder.com/acm/contest/39100/F 主要思想是跑dijkstra 边权为: (1)当属性相同时,走min(x,y+z) (2)属性不同时,走min(y,x+z) 因为最短路的当前点的后面点变化次数都相同,所以不用考虑路径上的除(1)和(2) 阅读全文
posted @ 2022-08-31 10:12 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:拓扑排序用于解决有向无环图的一些相关问题。 priority_queue<pair<int, int>,vector<pair<int,int>>,greater<pair<int, int>>> deg_idx; for (int i = 1; i <= n; i++) { deg_idx.pus 阅读全文
posted @ 2022-07-13 16:39 80k 阅读(72) 评论(0) 推荐(0) 编辑
摘要:没有重边和自环,连通块为一个环等价于连通块中每个节点的度为2 阅读全文
posted @ 2022-07-12 10:18 80k 阅读(16) 评论(0) 推荐(0) 编辑
摘要:如下图灵茶山艾府提供的题解中绿色三角形所示: 可以在一次DFS中,处理出节点的进出“时间”,这样,如果是有直接亲缘关系的节点,则会有时间上的包含关系。 时间用全局变量表示,进入DFS函数时记录进入时间,DFS完全部子树后,返回前,记录出时间。 https://www.bilibili.com/vid 阅读全文
posted @ 2022-06-27 16:55 80k 阅读(100) 评论(0) 推荐(0) 编辑
摘要:题目链接: https://codeforces.com/contest/1695/problem/D2 https://atcoder.jp/contests/apc001/tasks/apc001_e 解题思路: 可以考虑,对于每个节点v,其有k个子节点,则每个子节点中至少有k-1个侦查点,才能 阅读全文
posted @ 2022-06-19 22:07 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:AcWing 1073. 树的中心 #include<bits/stdc++.h> using namespace std; typedef long long LL; vector<int> adj[10010]; vector<int> w[10010]; int p[10010]; int w 阅读全文
posted @ 2022-06-16 13:02 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:有根树从根、无根树从任意一个节点开始处理即可 1、不考虑边权,考虑路径中点的个数,可以从任意一个节点开始进行DFS,DFS返回以当前节点为根的子树中,以当前节点为端点的最长路径。 经过当前节点的最长路径,即为以当前节点的子节点为端点的前2长的路径长度的和+1,并以此更新全局最长路径(直径)。 2、边 阅读全文
posted @ 2022-06-16 11:52 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:前序遍历的第一个元素是根,设其为r,则可以在中序遍历中找到r,并分别确定左右子树的前序遍历和中序遍历。这样递归求解即可。 注意,在中序遍历中查找r时,可以不用遍历,而是预处理出每个r在中序遍历I中的位置invI,这样就可以在O(1)的时间查找到。 是否可以生成一棵二叉树的条件为,每一次递归,判断r在 阅读全文
posted @ 2022-06-13 19:30 80k 阅读(63) 评论(0) 推荐(0) 编辑
摘要:AtCoder Beginner Contest 252 E - Road Reduction https://atcoder.jp/contests/abc252/editorial/4005 可以证明,总可以构建出一个生成树,使某一点到其余点的距离,等于原图中某一点到其余点的最小距离。 证明方法 阅读全文
posted @ 2022-05-23 17:24 80k 阅读(75) 评论(0) 推荐(0) 编辑
摘要:1、在图的邻接表存储中,可以使用模拟链表法: const int N,M=2*N; h[N],e[M],ne[M],idx;//链表头/链表结点的序号/链表节点的下一个节点 void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++;} 也可 阅读全文
posted @ 2022-05-01 20:05 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000876ff1/0000000000a45fc0#problem 1、利用总边数=度数/2。 2、为了解决度数不平衡的问题,交替使用T(随机传送)和W(邻接传送)操作。 阅读全文
posted @ 2022-04-04 20:49 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:一、最小生成树 1、prim算法 和dijkstra算法很像 (1)朴素版 O(n^2) 适合稠密图 dijkstra算法每次更新到起点的距离,prim算法每次更新到集合的最短距离(用邻接点到当前被加入点的距离更新)(集合为已经生成的树) 858 Prim算法求最小生成树 1 #include<io 阅读全文
posted @ 2021-12-31 11:38 80k 阅读(51) 评论(0) 推荐(0) 编辑
摘要:最短路问题 一、单源最短路(一个点到所有点的最短距离) 1、所有边的权重都为正 n个点,m个边 (1)朴素dijkstra O(n^2) 适合稠密图,O(n^2)=O(m) 算法步骤: ①初始化距离 dis[1]=0,dis[i]=+∞,集合s为已经找到的点的集合 ② for i=1:n 找到点t, 阅读全文
posted @ 2021-12-28 10:43 80k 阅读(137) 评论(0) 推荐(0) 编辑
摘要:图可以用邻接表存储, 邻接表为n个链表, 链表可以用数组模拟(比vector速度快)。 const int N; int h[N],e[N],ne[N],idx;//分别表示,h[i]:图中编号i的头结点,e[i]:节点i的值(编号),ne[i]节点i在链表中的下一个节点的idx。 void add 阅读全文
posted @ 2021-12-26 12:50 80k 阅读(218) 评论(0) 推荐(0) 编辑
摘要:三色标记法找图中的环,或拓扑排序思想拆除安全的点 阅读全文
posted @ 2021-12-07 20:19 80k 阅读(25) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示