车站分级(拓扑排序+空间建图优化)
摘要:题目:车站分级 题意转化:对于一班车,从起点到终点的所有站中,把非经停站向所有经停站连一条长度是1的边,表示前者的等级要严格小于后者的等级 问题:爆空间 解决方法:考虑到这种一群点向另一群点两两连边,可以优化为一群点先向一个虚拟点连一条长度为0边,再从这个虚拟点向另一边连一条长度是1的边,可以把空间
阅读全文
单词游戏(欧拉路径)
摘要:单词游戏 关键思路是不把每个字符串看成一个点,而是把每个字符串的起始点和终止点的字符看作一共点,把每一字符串的起点和终点连一条边,然后跑欧拉路径 #include<bits/stdc++.h> #define LL long long #define x first #define y second
阅读全文
欧拉回路(模板及优化)
摘要:欧拉回路模板 模板题:欧拉回路(含有向图和无向图) 未优化版:复杂度又可能会超过O(m),原因是把当前边删掉后,只有子节点会受影响,而它的父节点会继续遍历被删去的边,例如在1个点,很多自环的例子中会被卡 #include<bits/stdc++.h> #define LL long long #de
阅读全文
二分图总结
摘要:二分图 1.二分图<->不存在奇数环<->染色法不存在矛盾 2.匈牙利算法,匹配,最大匹配,匹配点,增广路径 最大匹配<->不存在增广路径 从左边的非匹配点,沿着一条非匹配边,走到一个匹配点,再沿着一条匹配边,走到一条匹配点,最后...到一个对面的非匹配点 3.最小点覆盖,最大独立集,最小路径点覆盖
阅读全文
用LCA解次小生成树问题
摘要:次小生成树 用lca求出每个非树边的路径中的边的最小值和次小值(因为要求的是严格次小生成树),这里有求次小的经典模板。 #include <iostream> #include <cstring> #include <algorithm> #define LL long long using nam
阅读全文
LCA总结1
摘要:LCA 有根树中 把点本身也称为它的祖先 方法1:向上标记法(不常用) 从一个点开始向上遍历标记,再从第二个开始向上遍历标记,第一个遍历到的标记的点是LCA 方法2:倍增 预处理fa[i,j]表示从i开始,向上走2^j步所能走到的点 $$ 0<=j<=log(n) $$ $$ f[i,j]= f[
阅读全文
求负环
摘要:基于SPFA (1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环 (2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数>=n,则也说明存在环 所有点加入队列 所有点dist[i]=0; 小trick1 spfa算法很有可能会超时,这时候可以: 当所有点的入队次数超过2
阅读全文
次小生成树
摘要:一本通:秘密的牛奶运输 次小生成树经典做法总结 定义: 严格次小生成树:生成树权值之和的第二小的数值的树 非严格次小生成树:生成树权值之和的数值第二小的的树 Sol1:(既可以求严格最小生成树,也可以求非严格) 先做一遍最小生成树,枚举每一条非树边,加上这条边,便形成了一个环,再去掉环上权值最大的一
阅读全文
Kruskal维护连通块个数
摘要:一本通 Kruskal维护连通块个数 本题一个关键而巧妙的点是想这个卫星要建在哪个点上,我们可以发现,d=+∞时,卫星k=0,k>=n时,d=0,再分析可知,d越大,k越小,由此我们想到二分d,看当前需要的k是不是小于题目给的k 但是怎么得到这个“当前需要的k”呢?答案是考虑当前的连通块数量,比如现
阅读全文
最短路输出路径
摘要:#include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int,int> PII; const int N=1010; int n; int g[N][N]; PII pre
阅读全文
Kruskal的经典扩展
摘要:acw348 Kruskal的经典扩展 题意:将一棵树扩展成一个完全图,保证该树是图的唯一最小生成树 关键思想:将一棵树看成是点集由集合合并组成的,每一次集合合并,都建构两个集合之间除树边以外的图边,由Kru算法的原来可知,最短的图边长度是w+1; Code: #include<bits/stdc+
阅读全文
快速幂+最短路+DP
摘要:快速幂+最短路+DP acw347 Code: #include<bits/stdc++.h> using namespace std; const int N = 210,M=110,INF=0x3f3f3f3f; int n, m; int g[N][N],res[N][N];//初始时g表示的
阅读全文
Floyd求无向图的最小环问题
摘要:acw344 Floyd求无向图的最小环问题 #include<bits/stdc++.h> using namespace std; const int N = 110,M=10010,INF=0x3f3f3f3f; int maxk[N][N]; int n, m; int g[N][N]; i
阅读全文
dijsktra次短路计数问题
摘要:Link 次短距离一定只能由次短距离更新 代码: #include <iostream> #include <cstring> #include <algorithm> #include <queue> #include<vector> using namespace std; const int
阅读全文