導彈攔截問題:最長不升子序列 (LNDS) 與 Dilworth 定理應用
問題描述 導彈系統:第一發可攔截任意高度,之後每發高度不得超過前一發。給定來襲導彈高度序列,求: 單套系統最多攔截幾枚(最長不升子序列長度)。 攔截所有導彈至
伸展樹 (Splay Tree) 核心操作:旋轉與 Splay 上溯
伸展樹基本性質 Splay Tree 是一種自調整二叉搜索樹,每次操作(查找、插入、刪除)後將目標節點通過旋轉移至根,攤還時間 O(log n)。每個節點維護
Effective C++ 條款 45:成員函數模板支援所有兼容類型的智能指針轉換
問題:智能指針需模仿原生指針的隱式轉換 原生指針支援:Derived* → Base*、T* → const T* 等隱式轉換。智能指針 SmartPtr<
HDU 6022 MG loves set:Meet-in-the-Middle + KD-Tree 計數諧波子集
問題轉化 給定 n ≤ 30 個整數 V[i](絕對值 ≤ 1e8),求非空子集個數,使得 Σ x_i² ≤ (Σ x_i)²。 展開右邊:(Σ x_i)² =
freopen 函數詳解:輸入輸出重定向到文件,ACM 調試利器
函數原型 FILE *freopen(const char *path, const char *mode, FILE *stream); path:目標文
多源最短路徑查詢:Floyd-Warshall 預處理 + O(1) 回答
問題描述 給定 n ≤ 100 個點的鄰接矩陣(a[i][j] 為直達距離,對稱、對角線 0),有 Q 個查詢(Q 可能很大),每次詢問 a→b 的最短路徑長度
P1576 最小花費:手續費率轉換邊權的 Dijkstra 變形
問題重述 n ≤ 2000 人,m 對可互相轉賬,手續費率 z%(扣除後到賬 100-z%)。求 A 最少匯多少錢,使 B 到賬恰好 100 元。保證 A 能達
平面最短路徑問題:Dijkstra 單源最短路優化實現
為什麼選 Dijkstra? 同樣是 n ≤ 100 的平面最短路問題(ID 231816),Floyd O(n³) 雖簡單但 Dijkstra O(n²)(鄰
藍橋杯「承壓計算」:金字塔重力分佈模擬與比例換算
問題背景 金字塔形堆疊金屬塊,共 29 層(第 1 層 1 塊,第 29 層 29 塊),最底層 30 支電子秤。每塊重量平均分佈到正下方兩塊,最終全部傳遞到底
平面最短路徑問題:坐標距離 + Floyd-Warshall 求解
問題描述 平面上有 n ≤ 100 個點,座標範圍 [-10000, 10000]。給定 m 條雙向連線,連線距離為兩點歐氏距離。求從源點 s 到目標點 t 的
二分圖匹配完整指南:最大匹配、最小點覆蓋、最大獨立集、最小路徑覆蓋
二分圖匹配四大核心問題 給定二分圖 G = (U, V, E),|U| = n, |V| = m。以下四個問題透過「最大匹配數」互相轉化: 問題定義定理關係
Kosaraju 演算法詳解:兩次 DFS 求有向圖強連通分量
強連通分量(SCC)定義 在有向圖中,若任意兩頂點 u, v 互相可達,則它們屬於同一強連通分量。Kosaraju 演算法以 O(V+E) 時間求出所有 SCC
Effective C++ 條款 46:模板內部定義非成員友元函數以支援隱式類型轉換
問題情境 在 Rational<T> 類別模板中,我們希望 operator* 能夠支援混合模式運算,例如: Rational<int>
NOI 1997「最優乘車」:最少換乘次數的 BFS 建模解法
問題描述 H 城有 N 個公車站(N ≤ 500)與 M 條單向公車路線(M ≤ 100)。每條路線依序經過若干站點。旅客從站點 1(飯店)出發,欲前往站點 N
Codevs 5960 信使問題:弗洛伊德演算法求最短傳遞時間
問題背景 戰爭時期,前線共有 n 個哨所(1 ≤ n ≤ 100),哨所之間可能存在通信聯繫。指揮部設於第 1 號哨所,下達命令後派遣信使向相連哨所傳遞,每條通
奶牛旅行:Floyd 直徑預處理 + 枚舉連接點求最小新直徑
問題建模 N 個牧場點(N ≤ 150),給定坐標與鄰接矩陣(0/1)。現有若干連通分量(牧場)。需新增一條邊連接兩不同分量,使合併後的新分量直徑最小。直徑 =