ARC083 vp記錄

Sktn0089發表於2024-03-10

有操作的操作場,考場過了 ABC(3/4)

A. Sugar Water

題意:一個杯子,可以容納 \(F\) 克糖水,一開始是空的。每次操作:

  1. 加入 \(100A\) 克水

  2. 加入 \(100B\) 克水

  3. 加入 \(C\) 克糖

  4. 加入 \(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)\)