Problem
給一張圖,問有多少對 (u, v) 沒有連通路徑。
Sample Input
|
|
Sample Output
|
|
Solution
只需要找到每個連通元件的大小即可,連通元件之間的點是無法存有路徑的。
|
|
給一張圖,問有多少對 (u, v) 沒有連通路徑。
|
|
|
|
只需要找到每個連通元件的大小即可,連通元件之間的點是無法存有路徑的。
|
|
給水位消長的情況,請問有有多少塊地經過溼乾的次數大於等於 K。
|
|
|
|
先對地面高度作一次排序,來確保每一次消長會將一個區間的所有元素都 +1
。
用 binary index tree 維護區間調整,單點查詢。
[l, r]
都加上 v,則對於前綴對 A[l] += v
, A[r+1] -= v
這樣保證前綴和不影響其結果。= sum(A[1, l])
|
|
給一張 N 個點的圖,問任意兩點之間的最大化最小邊。
|
|
|
|
先將圖縮成最大生成樹,然後使用 tarjan 作離線的 LCA 詢問。
接著詢問在樹上進行即可,因此每次詢問最慘會到 O(n)。
那我們稍微加速,採用 dp 的方式,將樹變成有根樹,記錄每一個節點向上攀升 1 個節點, 2 個節點, 4 個節點 …, 2^n 個節點的路徑上的最大最小值。
因此狀態會是 O(n log n), 建表也能在 O(n log n) 完成,接著調整兩個詢問節點的高度,先想辦法調整到兩個節點到水平高度,藉由之前的計算,高度不超過 n,因此理應可以在 O(log n) 時間內完成到調整到同一水平高度。
這題跟 UVa 12176 - Bring Your Own Horse 相當相似。
|
|
長度為 n (保證為 5 的倍數)個對列,小公車長度為 5,種類有 K 種,大公車長度 10,種類有 L 種,請問排列的方法數有多少種?
|
|
|
|
推導公式如下
$A_{n} = K * A_{n-1} + L * A_{n-2}$考慮塞入最後一台車的類型,找到遞迴公式。之後將其變成線性變換的結果。
$$M = \begin{bmatrix} K & 1 \\ L & 0 \end{bmatrix} \\ M^n = \begin{bmatrix} A^n & A^{n-1} \\ A^{n-1} & A^{n-2} \end{bmatrix} \\$$
|
|
給定一個樹狀圖 (題目說明任兩點只有一條唯一路徑),打算選定一點作為送貨中心,貨車將從該地點出發,經過所有的點,目標最小化送貨時間。不用考慮最後停在哪裡,只需要考慮最後一個送達的時刻。
|
|
|
|
簡單地發現到,會將每條邊都經過兩次,而停留位置到出發位置的邊上只會經過一次,也就是說扣除掉最長路徑就是答案。(將最長路徑的其中一個端點當作送貨中心。)
|
|
給第一、二象限的的線段,請問至少要從原點射幾發子彈才能將其全部射到。
|
|
|
|
將線段轉換成極角區間,之後帶入掃描線算法。
|
|
找最小面積覆蓋矩形、最小周長覆蓋矩形 覆蓋所有指定的點。
|
|
|
|
看到網路上有比較簡單的外積和內積寫法,當時採用找最小角度旋轉來完成,導致在角度疊加的時候發生極大的誤差累加,導致無法通過這一題。
而不管是在面積最小還是周長最小,保證矩形一定會涵蓋其凸多邊形上的一邊。
假設求的不是矩形,而是求正方形,則必須採用三分角度 + 窮舉交點。
|
|
抄答案如何快速檢查?題目是這樣子的,給定任兩點之間的路徑數,輸出從 i->j 兩步可到達的方法數。
現在只需要比對答案是否正確。
|
|
|
|
從矩陣乘法可以知道兩步內到達的方法數恰好是矩陣 $A \ast A$,假設答案是 B,A 和 B 都是 $n \ast n$ 矩陣,驗證 $A \ast A = B$ 是否正確,$A \ast A$ 用一般的矩陣乘法需要耗費 O(n^3)
的時間。
為了快速驗證,採用一個隨機算法,同乘上一個隨機的 n * 1 矩陣 C,那麼將問題轉換成
$(A \ast (A \ast C)) = B * C$發現每一步操作可以在 O(n^2)
時間內完成。
|
|
求以每個點當作矩形右下角,找到所有最大周長矩形的所有情況。
|
|
|
|
作法類似於最大矩形,主要改變的是單調堆的操作,當增加的周長幅度不夠時,則將不會丟入單調堆中。換句話說,增加幅度不足時,如果將這個高度丟入 (水平寬度會增加,垂直高度會減少),對於下一個點而言,沿用前一個會使得周長更長。
|
|
不能站在自己的長官前面,求排列數有多少種,只會有一個人沒有長官,剩餘的人恰有一個長官。
|
|
|
|
將題目轉換成樹狀圖,因此考慮當前樹的情況,將子樹做重複排列的操作。
對於過大的組合採用費馬小定理計算結果。
|
|