有操作的操作場,考場過了 ABC(3/4)
A. Sugar Water
題意:一個杯子,可以容納 \(F\) 克糖水,一開始是空的。每次操作:
-
加入 \(100A\) 克水
-
加入 \(100B\) 克水
-
加入 \(C\) 克糖
-
加入 \(D\) 克糖
每 \(100\) 克水最多溶解 \(E\) 克糖,求任意次操作後完全溶解的糖水中的最大含糖量,以及此時水的質量和糖的質量。
\(1\le A<B\le 30,\space 1\le C<D\le 30,\space 1\le E\le 100,\space 100A\le F\le 3000\)
列舉操作 \(1,2\) 的次數 \(i,j\),此時有 \(i\cdot 100A+j\cdot 100B\) 克水,還能加 \(\min((i+j)E,F-i\cdot 100A-j\cdot 100B)\) 克糖。預處理一下糖,做個字首 max 即可。
B. Restoring Road Network
題意:給出一張點數為 \(n\) 的無向連通圖的兩兩之間的最短路 \(a_{i,j}\),求這張圖邊的長度之和的最小值。
\(1\le n\le 300,\space 1\le a_{i,j} \le 10^9\)
列舉 \(i,j\),判斷之間是否有邊。
考慮列舉中轉點 \(k\),求出如果沒有邊時的最短路 \(x\)。
如果 \(a_{i,j}>x\) 則無解;如果 \(a_{i,j}=x\) 則不用加邊;如果 \(a_{i,j}<x\) 則有一條長度為 \(a_{i,j}\) 的邊。
時間複雜度 \(O(n^3)\)。
C. Bichrome Tree
題意:一棵 \(n\) 個點的有根樹,你需要給每個點定一個顏色(黑/白)和權值。給出 \(X_i\) 表示點 \(i\) 的子樹中與 \(i\) 顏色相同的點權和,求是否存在一種構造方案。
\(1\le n\le 1000,\space 1\le X_i\le 5000\)
設 \(f[u,i,j]\) 表示點 \(u\) 子樹內與 \(u\) 顏色相同點權和為 \(i\),不相同的為 \(j\)。
容易知道 \(X_u=i\),我們只需要設 \(f[u,j]\) 即可。
轉移時用揹包,設 \(g[i,j]\) 表示同色點點權和為 \(i\),異色點點權和為 \(j\) 是否存在。
但是列舉狀態 \(O(n^2)\),列舉轉移 \(O(n)\),點數 \(O(n)\),一共 \(O(n^4)\),無法透過。
考慮每個點的判定條件是 \(g[i,j]\) 中 \(i\le X_u\),我們一定是讓權值和越小越好。
設 \(f[u]\) 表示異色點權和最小值,用 \(g\) 來合併,\(g[i]\) 為同色點權和為 \(i\),異色點權和最小值。
這樣是 \(O(n^2)\) 的。
D. Collecting Balls
題意:一個 \(n\times n\) 的網格,有 \(2n\) 個小球,第 \(i\) 個在第 \(x_i\) 行 \(y_i\) 列。每行每列都有一個機器人,每次啟動一個機器人,同一時刻最多一個機器人啟動。啟動第 \(i\) 行的機器人,他會取走第 \(i\) 行列編號最小的小球;啟動第 \(i\) 列的機器人,他會取走第 \(i\) 列行編號最小的小球。求有多少種啟動順序,使得可以取走所有小球。
\(1\le n\le 10^5\)
考慮把 \(x_i\) 和 \(y_i+n\) 連邊,一共 \(2n\) 個點,連出來是二分圖。
會發現無解的條件是存在一個連通塊不是基環樹。
此時圖是基環樹森林,現在要算的相當於:操作一個點會刪掉和他連線的最小編號的點對應的邊,有多少種操作點的順序使得刪去所有邊。
考慮每個基環樹。樹部分中每個點一定會刪掉與父親的連邊,而環有兩種:所有點都刪左邊的邊,或者都刪右邊的邊。
到這裡開始碼,但是分討大難寫,直到最後沒寫出來。
考慮直接列舉環上點的刪左還是刪右。然後對於每個點找出他應該刪掉的邊,以及為了刪掉這條邊必須在他之前操作的點。
我們對先後關係連邊,要求的是拓撲序個數。會發現建出來的圖是一個森林,對於每棵樹算一下方案數即可。
時間複雜度 \(O(n)\)。