斜率優化理解【16年 瀋陽區域賽 The Elder 】
舉個例子來理解
16年瀋陽區域賽【樹形dp+斜率優化】
題意:
給你n個點,n-1條邊的樹。每條邊有一個權值w。給你一個值p。
1號節點為根節點。求1號點到所有節點的路徑中的最小權值 的最大值。
權值計算方法:將這條路可以一次走完,權值是(dis[u]-dis[1])*(dis[u]-dis[1]),也可以分段走完,每經過一個點權值加p,假如經過一個點x,那麼權值可以是(dis[u]-dis[x])*(dis[u]-dis[x])+p+(dis[x]-dis1])*(dis[x]-dis1])
如果一個一個找分段的點就是O(N^2),那麼可以用斜率優化的方法
終點是u,如果v點比w點作為暫停的點更優,那麼dp[i]是到達i的的最小的權值
dp[v]+p+(dis[u]-dis[v])*(dis[u]-dis[v])<=dp[w]+p+(dis[u]-dis[w])*(dis[u]-dis[w]);
dp[v]+dis[u]^2+dis[v]^2-2*dis[u]*dis[v]<=dp[w]+dis[u]^2+dis[w]^2-2*dis[u]*dis[w];
dp[v]+dis[v]^2-2*dis[u]*dis[v]<=dp[w]+dis[w]^2-2*dis[u]*dis[w];
dp[v]+dis[v]^2-dp[w]-dis[w]^2<=2*dis[u]*(dis[v]-dis[w]);
不妨假設f[x]=dp[x]+dis[x]^2;
那麼 f[v]-f[w]<=2*dis[u]*(dis[v]-dis[w]);
,
假設某點是(dis[x],f[x]),那麼就是斜率問題了,當且僅當v>w且時v點更新u,比w點更新w優。
這時候就需要維護凸包了:
維護凸包(下凸)原因:
假設存在這樣的三個點
,很明顯他們存在這樣的關係,
那麼他們跟2*dis[u]會存在三種可能的關係
1.,
2.,
3.,
未完待續