随笔分类 - 图论算法
摘要:算法要素:djst+次大(小)值思想 具体实现: 去学k短路然后把k设成2 djst统计最小值和次小值 但是会出现一个问题:djst的基础思想是通过vis数组保证每一个点只被修改一次。 但是由于要维护最小值和次小值,因此可能出现最小值已被更新完但是次小值根本就没有被更新的情况。 这个时候vis数组肯
阅读全文
摘要:这道题调了快2h,因为一个极其愚蠢的错误 算法要素:kruskal+倍增LCA+同步求最大值次大值 算法分析: 基本思路: 首先肯定要生成一个最小生成树,然后有两种枚举方式: <1>可以选择枚举生成树上每一条边 <2>枚举每一条非树边 为什么要枚举呢?显然是因为这个问题并没有明显的单调性,无法通过贪
阅读全文
摘要:一道很有意思的题。 算法要素:floyd+利用过程量 核心思想:算法可以利用的部分不只有结果量,过程量也会起到一些意想不到的作用。 洛谷题面传送门 题目分析: 一、先说Floyd的本质: 用多了f[i][j]的定义,就会忘了其实它是压掉一维的结果。 最初的定义是f[i][j][k],意为从i到j,只
阅读全文
摘要:题目算法要素:Floyd 题目分析: 最开始我想当作差分约束处理,但是没调过,只有20tps。 这个题的正解思路很有意思,很容易发现点数最多只有100,边数最多只有10000,因此可以用floyd维护f[a][b]表示a是否大于b。 若f[a][b]=true,则a>b。 若f[b][a]=true
阅读全文
摘要:题面:洛谷传送门 题目算法要素:tarjan+树形dp 题目分析: 一、总体概括 可以发现一个环中的点必须同时被选择,因此很容易能想到要tarjan缩点。 缩点后形成一张DAG,由于题目的条件,d[i]=0表示一个软件没有另一个软件为前提,因此有一个超级源点0。可以考虑从0点开始,跑一遍树形dp(树
阅读全文
摘要:洛谷题面传送门 ###题目分析: 题面给出每一步可以走2^k步,k为任意正整数。这很明显是倍增。 而简单的最短路无法解决这个问题,因此考虑图上倍增dp。 设f[i][j][q](bool)表示是否存在一条从i到j长度为2^q的路径。 g[i][j]存储从i到j的最小步数和 考虑初始化, 对于每一个输
阅读全文
摘要:使用算法:kruskal构造最大生成树(森林)+倍增LCA 前置知识: kruskal模板 倍增求LCA 洛谷传送门 题意概述 一张n个点m条边的无向图,每条边边权为w,给出q个查询,查询x,y之间有无路径联通,若无路径,则输出-1,若有路径,则输出两点之间所有路径中,路径上边权最小值的最大值。 算
阅读全文
摘要:一、定义: ####独立集:在一个图中,找到一个集合包含的所有点相互之间都不存在连边 ####最大独立集:在所有独立集中包含元素个数最多的独立集 #二、处理问题的第一步:问题转化: 需要用最大团来求最大点独立集,因此先引入最大团的概念 最大团问题 、 tips:最大团和强连通分量有区别,最大团U要求
阅读全文
摘要:基础的差分约束 #拓展 #Code #include<bits/stdc++.h> using namespace std; const int maxn=5e3+5; int n,m,a,b,c,head[maxn],dis[maxn],ecnt=-1,cnt[maxn]; bool jud=1;
阅读全文
摘要:第一次写缩点是用vector存边,因此现在用链前存边再写一遍 传送门:P3387 【模板】缩点 题意分析 (1)很容易发现,由于每一个点可以被经过多次,那么同一个强连通分量中的每一个点都可以互相到达,因此可以看作一个点。 (2)缩点后,整张图一定变成了一个DAG 证明:反证即可,假设不是DAG,则有
阅读全文
摘要:一个n年前学的东西,发现还没写博客,就来上一篇 定义: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序
阅读全文
摘要:由于原来的模板在某些题目中出现了一些不可知的错误,我就把模板换了一个写法。 #include<bits/stdc++.h> using namespace std; int f[310][310]; int n,m,a,b,c,dis[310]; bool vis[310]; void prim()
阅读全文
摘要:dfn[now]表示在now点在dfs搜索树中的dfs序。 low[now]表示的是now通过后向边、横叉边能到达的dfn最小的点的dfs序。 我们取一个强连通分量中dfn最小的点作为整个强连通分量的代表元素。 因此low[now]的实际意义就是now所在的强连通分量的代表元素的点的dfn值。 to
阅读全文
摘要:知识点总结。 判断树上的链 ···每个点的度数不超过二(出度与入度之和) 判断树 ···n个点,只有n-1条边 ···每两个点之间的边具有唯一性 多叉树转换成二叉树 ···第一个孩子作为左孩子,第一个孩子的兄弟作为它的右孩子 最小生成树 生成:prim or kruskal具体代码在这里 一些小性质
阅读全文
摘要:知识点: (1)欧拉路径定义:从一个点出发,不重不漏的经过图中每一条边的一条路径(允许多次经过同一个点)。 (2)欧拉路径的判断: ···········<1>若为无向图,则需连通,且图中恰好存在两个点的度数是奇数,其他节点的度数为偶数,这两个度数为奇数的点就是起点与终点;或者所有点度数都是偶数。
阅读全文
摘要:两个月前写的模板,忘记存blog了 prim #include<cstdio> #include<algorithm> using namespace std; const int maxn=2e5+5; int n, m, f[maxn][maxn],tot,dis[maxn],s; bool v
阅读全文
摘要:和原板子区别不大,更符合我的代码习惯 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn = 2e5+5; int n, m, head[
阅读全文
摘要:#include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn = 2e5+5; struct mint { int nxt, v, w; }e[ma
阅读全文

浙公网安备 33010602011771号