Прошел первый этап XV Открытого Кубка по программированию. Как решать задачи А, Е, К?
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3857 |
| 2 | jiangly | 3810 |
| 3 | maroonrk | 3534 |
| 4 | tourist | 3528 |
| 5 | Kevin114514 | 3510 |
| 6 | turmax | 3411 |
| 7 | Um_nik | 3387 |
| 8 | Radewoosh | 3367 |
| 9 | heuristica | 3322 |
| 10 | strapple | 3317 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | maspy | 150 |
| 3 | Um_nik | 145 |
| 4 | Errichto | 139 |
| 5 | adamant | 136 |
| 6 | maroonrk | 134 |
| 7 | DNR | 133 |
| 7 | nik_exists | 133 |
| 9 | AmShZ | 130 |
| 10 | Dominater069 | 129 |
Прошел первый этап XV Открытого Кубка по программированию. Как решать задачи А, Е, К?
| Name |
|---|



A Let's compute answer for vertex v. We can visit an associative vertex u like this:
Firstly go some steps using given edges, after that go using reversed edges.
So Dfs(vertex, isReversed) will work perfect here.
From isReversed = false we can go to isReversed = true, but not in other way.
Code
K, dynamic programming and
meet in the middledivide and conquerSorry that I am in english.
Can you explain in more details problem K?
K dp(i, j) — first i keys are assigned, and we have covered first j alphabets.
dp(i, j) = min dp(i-1, k) + cost(k+1, j)
Let's denote optK(i, j) — optimal k that gives for us minimum.
We can prove that, optK(i, j) <= optK(i, j + 1)
let's calculate recursively calc(i, l..r, optKl, optKr).
Firstly, we can calculate dp(i, mid), then recursively solve for
calc(i, l..mid, optKl, opt(i, mid)) and calc(i, mid+1..r, opt(i,mid), optKr)).
321E - Ciel and Gondolas also can be solved using this trick
Also, you can use convex hull optimization. Lets dp(i,j) — first i keys are assigned, and we have covered first j alphabets.
Code
K can be done by dp with a convex hull trick.
I would call it "divide and conquer" rather than "meet in the middle".
Indeed, thanks.