Skip to content

Commit 26e1de9

Browse files
committed
Address PR comments
1 parent b0c7f49 commit 26e1de9

File tree

1 file changed

+38
-33
lines changed

1 file changed

+38
-33
lines changed

contests/_37-PDP/b-tiphunting-solution.md

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,34 @@ _διαδρομή_ ορίζουμε μια πεπερασμένη ακολουθ
5454
## Γενικές Παρατηρήσεις
5555

5656
Πριν προχωρήσουμε, ας παρατηρήσουμε κάποιες ιδιότητες της βέλτιστης λύσης που
57-
θα μας φανούν χρήσιμα σε όλα τα υποπροβλήματα που ακολουθούν. Αρχικά, στη
58-
βέλτιστη λύση δεν θα χρειαστεί ποτέ να διασχίσουμε κάποιο δρόμο πάνω από δύο
59-
φορές (μπορείτε να δείτε γιατί;).
60-
61-
Γενικότερα, η βέλτιστη λύση θα είναι μια διαδρομή η οποία θα περιλαμβάνει
62-
το (μοναδικό) μονοπάτι που συνδέει τα σπίτια $$L$$ και $$R$$, όπου σε κάθε
63-
στάση σε κάποιο σπίτι $$u$$, θα έχουμε την ευκαιρία να "ξεφύγουμε" για λίγο από
64-
το βασικό του μονοπάτι και να εξερευνήσουμε τα σπίτια που συνδέονται με το
65-
$$u$$ (άμεσα ή έμμεσα μέσω άλλων δρόμων), να μαζέψουμε όσα περισσότερα
66-
φιλοδωρήματα μπορούμε, να επιστρέψουμε πάλι στο $$u$$ και να συνεχίσουμε προς
67-
τον τελικό μας προορισμό. Έτσι, στο τέλος θα έχουμε διασχίσει τους δρόμους που
68-
βρίσκονται στο κεντρικό μονοπάτι μεταξύ $$L$$ και $$R$$ μόνο μια φορά, και για
69-
κάθε άλλο δρόμο θα τον έχουμε διασχίσει είτε καμία είτε δύο φορές.
70-
71-
Τέλος, παρατηρούμε οτι η απάντηση στο ερώτημα $$L, R$$ είναι η ίδια με
72-
την απάντηση στο ερώτημα $$R, L$$ λόγω συμμετρίας (οι δρόμοι είναι διπλής
73-
κατεύθυνσης).
57+
θα μας φανούν χρήσιμα σε όλα τα υποπροβλήματα που ακολουθούν.
58+
59+
**Παρατήρηση 1**:
60+
Στη βέλτιστη λύση δεν θα χρειαστεί ποτέ να διασχίσουμε κάποιο δρόμο πάνω από
61+
δύο φορές.
62+
63+
**Παρατήρηση 2**:
64+
Η βέλτιστη λύση θα είναι μια διαδρομή η οποία θα περιλαμβάνει το (μοναδικό)
65+
μονοπάτι που συνδέει τα σπίτια $$L$$ και $$R$$, όπου σε κάθε στάση σε κάποιο
66+
σπίτι $$u$$, θα έχουμε την ευκαιρία να "ξεφύγουμε" για λίγο από το βασικό του
67+
μονοπάτι και να εξερευνήσουμε τα σπίτια που συνδέονται με το $$u$$ (άμεσα ή
68+
έμμεσα μέσω άλλων δρόμων), να μαζέψουμε όσα περισσότερα φιλοδωρήματα μπορούμε,
69+
να επιστρέψουμε πάλι στο $$u$$ και να συνεχίσουμε προς τον τελικό μας
70+
προορισμό. Έτσι, στο τέλος θα έχουμε διασχίσει τους δρόμους που βρίσκονται στο
71+
κεντρικό μονοπάτι μεταξύ $$L$$ και $$R$$ μόνο μια φορά, και για κάθε άλλο δρόμο
72+
θα τον έχουμε διασχίσει είτε καμία είτε δύο φορές.
73+
74+
**Παρατήρηση 3**:
75+
Η απάντηση στο ερώτημα $$L, R$$ είναι η ίδια με την απάντηση στο ερώτημα $$R,
76+
L$$ λόγω συμμετρίας (οι δρόμοι είναι διπλής κατεύθυνσης).
7477

7578
## Υποπρόβλημα 2 ($$N \le 1.000, Q \le 1.000, L = R$$) --- Λύση $$\mathcal{O}(N Q)$$
7679

7780
Ο περιορισμός $$L = R$$ απλουστεύει το πρόβλημα καθώς δεν χρειάζεται να
7881
ασχοληθούμε με το μέρος της λύσης που περιλαμβάνει το μονοπάτι που αναφέραμε
7982
προηγουμένως, παρά μόνο με την επιμέρους εξερεύνηση.
8083

81-
Ας φανταστούμε ότι το σπίτι $$L$$ από το οποία ξεκινάμε είναι η ρίζα του
84+
Ας φανταστούμε ότι το σπίτι $$L$$ από το οποίο ξεκινάμε είναι η ρίζα του
8285
δέντρου που αναπαριστά το οδικό δίκτυο. Κάθε σπίτι $$u$$ που συνδέεται άμεσα με
8386
το $$L$$ ορίζει ένα _υποδέντρο_ το οποίο θα συμβολίζουμε με
8487
$$\text{subtree}(u)$$. Για κάθε ένα από αυτά τα δέντρα, έχουμε να κάνουμε μια
@@ -90,7 +93,7 @@ $$\text{subtree}(u)$$. Για κάθε ένα από αυτά τα δέντρα
9093
2. να _μη διασχίσουμε ποτέ_ το δρόμο που συνδέει το σπίτι $$L$$ με το σπίτι
9194
$$u$$.
9295

93-
Ας συμβολίσουμε με $$\text{subtree\_loop\_opt}[u]$$ το μέγιστό δυνατό κέρδος
96+
Ας ορίσουμε $$\text{subtree\_loop\_opt}[u]$$ ως το μέγιστό δυνατό κέρδος
9497
που μπορούμε να έχουμε αν ξεκινήσουμε από το σπίτι $$u$$, κινούμαστε μόνο μέσα
9598
στο υποδέντρο που ορίζει το σπίτι $$u$$, και τελικά επιστρέψουμε πάλι στο
9699
$$u$$.
@@ -107,7 +110,7 @@ $$u$$.
107110
$$ \text{subtree\_loop\_opt}[u] = t_u + \sum_{v \in \text{children}(u)}
108111
\left( \text{subtree\_loop\_opt}[v] - 2 \cdot w_{u, v} \right)^+ $$
109112

110-
όπου ο συμβολισμός $$(x)^+$$ σημαίνει $$\max(0, x)$$ και $$\text{children}[u]$$
113+
όπου ο συμβολισμός $$(x)^+$$ σημαίνει $$\max(0, x)$$ και $$\text{children}(u)$$
111114
είναι το σύνολο με όλα τα παιδιά της κορυφής $$u$$.
112115

113116
Η τελική απάντηση στο ερώτημα βρίσκεται στο $$\text{subree\_loop\_opt}[L]$$.
@@ -133,7 +136,7 @@ $$\text{subtree}(L)$$ για το οποίο μπορούμε να υπολογ
133136
Σε αντίθεση όμως με πριν, μόλις επιστρέψουμε στο $$L$$ θα πρέπει να ανέβουμε
134137
ένα επίπεδο παραπάνω, ακολουθώντας το μονοπάτι προς τη ρίζα και μαζεύοντας κι
135138
άλλα φιλοδωρήματα στην πορεία. Ας ορίσουμε λοιπόν την ποσότητα
136-
$$\text{supertree\_root\_opt}[u]$$ η οποία θα είναι ίση με το μέγιστο κέρδος που
139+
$$\text{supertree\_root\_opt}[u]$$ ως το μέγιστο κέρδος που
137140
μπορούμε να έχουμε όταν ξεκινάμε από το σπίτι $$u$$ (χωρίς όμως να συλλέγουμε
138141
το φιλοδώρημα του $$u$$), καταλλήγουμε τελικά στη ρίζα $$R$$ του δέντρου, και
139142
σε όλη τη διαδρομή απαγορεύεται να επισκεφτούμε οποιοδήποτε σπίτι βρίσκεται στο
@@ -142,7 +145,7 @@ $$\text{supertree\_root\_opt}[u]$$ η οποία θα είναι ίση με τ
142145
Εαν υπολογίσουμε την τιμή της παραπάνω ποσότητας για την κορυφή $$L$$, τότε
143146
μπορούμε να υπολογίσουμε την απάντηση του ερωτήματος απλά με το άθροισμα:
144147

145-
$$ \text{subtree\_loop\_opt}[L] + \text{supertree\_root\_opt}[L] $$.
148+
$$ \text{subtree\_loop\_opt}[L] + \text{supertree\_root\_opt}[L]. $$
146149

147150
Μπορούμε να υπολογίσουμε όλες τις τιμές $$\text{supertree\_root\_opt}[u]$$ από
148151
"πάνω προς τα κάτω" χρησιμοποιώντας τις τιμές $$\text{subtree\_loop\_opt}$$ ως
@@ -173,11 +176,11 @@ $$\text{supertree\_root\_opt}$$ για τον γονέα $$\text{parent(u)}$$ τ
173176
όταν αυτή έχει θετικό πρόσημο. Τέλος, σε κάθε περίπτωση, συμπεριλαμβάνουμε και
174177
το κόστος διάσχισης του δρόμου $$(u, \text{parent}[u])$$ ακριβώς μία φορά.
175178

176-
Για την επίλυση ενός ερωτήματος λοιπόν χρειάστηκαν _δύο διασχίσεις_ του
177-
δέντρου (μια για τον υπολογισμό των $$\text{subtree\_loop\_opt}$$, και έπειτα
178-
μια για τον υπολογισμό των $$\text{supertree\_root\_opt}$$), επομένως
179-
$$\mathcal{O}(N)$$ χρόνος. Συνολικά $$\mathcal{O}(N \cdot Q)$$ πολυπλοκότητα και
180-
γι' αυτό το υποπρόβλημα.
179+
Για την επίλυση ενός ερωτήματος λοιπόν χρειάστηκαν _δύο διασχίσεις_ του δέντρου
180+
(μια για τον υπολογισμό των $$\text{subtree\_loop\_opt}$$, και έπειτα μια για
181+
τον υπολογισμό των $$\text{supertree\_root\_opt}$$), οι οποίες γίνονται σε
182+
$$\mathcal{O}(N)$$ χρόνο. Συνολικά $$\mathcal{O}(N \cdot Q)$$ πολυπλοκότητα
183+
και γι' αυτό το υποπρόβλημα.
181184

182185
## Υποπρόβλημα 4 ($$L = R$$) --- Λύση $$\mathcal{O}(N + Q)$$
183186

@@ -203,16 +206,18 @@ $$\text{supertree\_loop\_opt}[u]$$, ώστε να την έχουμε διαθέ
203206

204207
Μάλιστα, οι τιμές αυτές μοιάζουν πολύ με τις τιμές $$\text{supertree\_root\_opt}$$ που
205208
ορίσαμε στο προηγούμενο υποπρόβλημα, με τη διαφορά όμως ότι δεν είναι πλέον αναγκαίο
206-
να φτάσουμε μέχρι τη ρίζα, αλλά πρέπει να γυρίσουμε πίσω στην κορυφή $$u$$. Ο τύπος
207-
που είχαμε προηγούμενως αλλάζει ως εξής:
209+
να φτάσουμε μέχρι τη ρίζα, αλλά πρέπει να γυρίσουμε πίσω στην κορυφή $$u$$,
210+
το οποίο σημαίνει ότι πρέπει να μετρήσουμε το κόστος του δρόμου
211+
$$(u, \text{parent}(u))$$ **δύο φορές**. Ο τύπος που είχαμε προηγούμενως
212+
αλλάζει ως εξής:
208213

209214
$$
210215
\begin{align*}
211216
\text{supertree\_loop\_opt}[u] =
212217
( & \text{supertree\_loop\_opt}[\text{parent}(u)]
213218
+ \text{subtree\_loop\_opt}[\text{parent}(u)] \\
214219
&- (\text{subtree\_loop\_opt}[u] - 2 \cdot w_{u, \text{parent}(u)})^+
215-
- 2 \cdot w_{u, \text{parent}(u)} )^+
220+
- \textcolor{red}{2} \cdot w_{u, \text{parent}(u)} )^+
216221
\end{align*}
217222
$$
218223

@@ -222,7 +227,7 @@ $$\text{supertree\_loop\_opt}$$ με ρίζα την κορυφή 1 μπορεί
222227
ερωτήματα, κι έπειτα για κάθε ερώτημα, μπορούμε να υπολογίσουμε την απάντηση σε
223228
σταθερό χρόνο με τον τύπο:
224229

225-
$$\text{subtree\_loop\_opt}[L] + \text{supertree\_loop\_opt}[L]$$.
230+
$$ \text{subtree\_loop\_opt}[L] + \text{supertree\_loop\_opt}[L]. $$
226231

227232
Συνολικά η λύση αυτή έχει χρονική πολυπλοκότητα $$\mathcal{O}(N + Q)$$.
228233

@@ -259,7 +264,7 @@ $$\text{subtree\_loop\_opt}[L] + \text{supertree\_loop\_opt}[L]$$.
259264
όπως στον ορισμό του $$\text{supertree\_loop\_opt}$$ παραπάνω).
260265

261266
Για την ώρα, ας υποθέσουμε ότι γνωρίζουμε τον ελάχιστο κοινό πρόγονο $$z =
262-
LCA(L, R)$$.
267+
\text{LCA}(L, R)$$.
263268

264269
Έχουμε τις παρακάτω περιπτώσεις:
265270

@@ -343,4 +348,4 @@ LCA(L, R)$$.
343348

344349
Η λύση που περιγράψαμε έχει συνολική πολυπλοκότητα $$\mathcal{O}
345350
( (N + Q) \log N )$$ η οποία μας καλύπτει για τους περιορισμούς
346-
του προβλήματος.
351+
του προβλήματος.

0 commit comments

Comments
 (0)