图论
Floyd求最小环
for(int k = 1; k <= n; ++k)
{
for(int i = 1; i < k; ++i)
{
for(int j = i + 1; j <= k; ++j)
{
res = min(res , dis[i][j] + a[i][k] + a[k][j]);
}
}
}
for(int k = 1; k <= n; ++k)
{
for(int i = 1; i <= n; ++i)
{
for(int j = 1; j <= n; ++j)
{
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
差分约束系统
对于一个 (n) 个变量构成的系统,求 (x_t - x_s) 的最大值。
对于一个形如 (x_i le x_j + c) 的形式,从 (j) 到 (i) 建一条权值为 (c) 的边,求最短路。
次小生成树
非严格
树上倍增维护路径最大边权,枚举非树边。
严格
树上倍增维护最大和次大边权,枚举非树边。
Dilworth 定理
拓扑图的最小链覆盖等于最长反链,最小链覆盖:用最少的链覆盖所有点,使得每个点至少被覆盖一次,最长反链:最大的点集,点集中任意两个点无法互相到达。
二分图
-
二分图最小覆盖等于最大匹配。
-
二分图最大独立点集等于总点数减去最大匹配。