Little Sub and AA
http://acm.hznu.edu.cn/OJ/problem.php?cid=1263&pid=11
http://acm.hznu.edu.cn/OJ/problem.php?id=2590
題意:從S到T,可以隨著環境變化隨時改變線路,有個人會在某個時候按下按鈕使得和你相鄰的某條邊不能走,這樣的事情只會發生一次。問最優策略下最壞情況的最短路徑。
C++版本一
題解:
? 先處理一個子問題:對于任何一條邊,去掉該邊后端點i到T的最短路徑f[i]。
? 從T跑出一棵最短路樹,因為如果邊不在最短路樹上,那么依然是最短路長度,否則的話,考慮將樹上y到fa[y]該邊去掉,則是在子樹中取一個點,跳橫跳邊再往上到根,也就是dist[x]-dist[y]+edge[x,p]+dist[p]。
?
?
C++版本二
我們可以先對于每個點求出最小的dist[x]+edge[x,p]+dist[p],考慮非樹邊(x,p),若x在z的子樹內,p不在z的子樹內,則該值就可以對z的f產生貢獻。我們枚舉每一條非樹邊,對于(x,y),則將x到lca(x,y)之下的每個點都更新掉,用樹鏈剖分實現。然后把所有的f[i]都減去dist[i]就得到真正的f[i]。?
?
? 得到f之后,從T向S跑最短路,但是更新答案的時候要用? max(d[x]+edge[p].w,f[edge[p].adj])來更新答案。
? 意義為如果走最短路比我按按鈕結束游戲要劣,那我就等著。
?
?
C++版本三
? 二分答案也是另一個求解方法。
?
總結
以上是生活随笔為你收集整理的Little Sub and AA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Little Sub and Trian
- 下一篇: Little Sub and Johan