Editorial for Урт палиндром
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
🔴 Editorial --- Kingdom Defense Planning (Сурагчдад ойлгомжтой тайлбар)
📖 Бодлогын зорилго
Бидэнд мод (tree) өгөгдөнө. Хот бүр үнэ цэнэтэй.
Бид яг K хот сонгоно.
👉 Нийт оноо: - Сонгосон хотуудын value нийлбэр - Хоорондын зай (distance)-г хасна
🧠 Энгийнээр ойлговол
- Илүү их value авахыг хүснэ ✅
- Гэхдээ хол байрласан хотууд penalty өгнө ❌
👉 Иймээс: "ойрхон, ашигтай хотуудыг сонгох"
❗ Яагаад хэцүү вэ?
Хэрвээ бүх хосыг шалгавал: - O(K²) болно ❌
💡 Гол санаа (хамгийн чухал!)
Tree дээр зайг edge бүрээр тооцож болно.
👉 Нэг edge (зам) авч үзье:
Хэрвээ: - нэг талд i хот - нөгөө талд j хот байвал
👉 penalty = i × j × w
🔥 DP санаа
dp[u][k] = u-ийн subtree-с k хот сонгох хамгийн их оноо
🔄 Merge хийх
Child-уудыг нэгтгэхдээ:
dp[u][i] + dp[v][j] - i × j × w
🌳 DFS ашиглана
dfs(u): dp[u] эхлүүлнэ child бүр дээр merge хийнэ
⚡ Яагаад optimization хэрэгтэй вэ?
Naive merge: → O(K²) ❌
👉 Small-to-large ашиглана: - жижиг vector-г том руу merge
🧪 Жишээ ойлголт
Хоёр хэсэг: - 2 хот - 3 хот
👉 хооронд penalty: 2 × 3 × w
⚠️ Алдаа гаргах магадлалтай
- ❌ overflow (i × j × w)
- ❌ merge буруу
- ❌ dp хэмжээ хэтрэх
🎯 Хариу
dp[root][K]
🎓 Дүгнэлт
Энэ бодлогоор:
- Tree DP
- Merge
- Optimization
сурна.
👉 Олимпиадын түвшний бодлого 🚀
Comments