1. 程式人生 > 實用技巧 >10.4 學習筆記

10.4 學習筆記

圖論

目錄


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 定理

拓撲圖的最小鏈覆蓋等於最長反鏈,最小鏈覆蓋:用最少的鏈覆蓋所有點,使得每個點至少被覆蓋一次,最長反鏈:最大的點集,點集中任意兩個點無法互相到達。

二分圖

  • 二分圖最小覆蓋等於最大匹配。

  • 二分圖最大獨立點集等於總點數減去最大匹配。