link:幸福的道路
題目有坑.題意:一棵樹 求出每個點到樹上另外乙個點的最大距離 在距離陣列上求出最長一段連續的區間使其極差<=s 求區間長度最大值。
題目說的標號的意思就是指樹上的標號 而不是重新的標號。
求樹上某個點到另外乙個點的最大值 沒有什麼好的辦法 通常都是樹形dp+換根 換根比較基礎再維護乙個次大值 在換的時候再維護乙個父親那邊過來的極大值即可。
考慮第二問 乙個比較顯然的想法是拿到左端點尋找右端點 st表+二分是通常的解決辦法 給出乙個比較強大的做法是 倍增 直接從左端點倍增到右端點即可。
再給出乙個o(n)的做法是 雙指標法 可以發現維護乙個右指標向右掃即可 可以發現右指標單調遞增。
此時需要注意的是對於區間極差的維護 採用單調佇列 乙個坑點:當隊列為空的時候注意把i加入佇列中。
這裡採用雙指標,可能也叫遲取法 總複雜度o(n).
const int maxn=1000010;
int n,m,ss,len,l,r,l,r,ans;
int f[maxn],g[maxn],w[maxn],c[maxn],q[maxn],s[maxn];
int lin[maxn],ver[maxn],nex[maxn],e[maxn];
inline void add(int x,int y,int z)
inline void dfs(int x)
else g[x]=max(g[x],f[tn]+e[i]); }}
inline void dp(int x,int v)
}int main()
dfs(1);c[1]=f[1];dp(1,0);
s[1]=q[l=l=r=r=1]=1;int j=2;
rep(1,n,i)//對於乙個i求出乙個最遠的j.
ans=max(ans,j-i);
} put(ans);return 0;
}
bzoj 2500 幸福的道路 動態規劃 單調棧
題意 給出一棵樹,每條邊都有乙個長度。我們規定每個點的權值為從該點開始走過的一條最長的路徑的長度。求乙個最長的區間 l,r 使得 l,r 裡面點權的最大值和最小值只差不超過m。n 1000000 一開始看錯題目了,結果卡了半天。最後發現是一道大水題。先求點權,直接dp求,經典模型啊。隨便寫。後面求出...
bzoj2500幸福的道路 樹形dp 單調佇列
time limit 20 sec memory limit 256 mb submit 434 solved 170 submit status discuss 小t與小l終於決定走在一起,他們不想浪費在一起的每一分每一秒,所以他們決定每天早上一同晨練來享受在一起的時光.他們畫出了晨練路線的草圖,...
bzoj2500 幸福的道路 樹形dp 單調佇列
小t與小l終於決定走在一起,他們不想浪費在一起的每一分每一秒,所以他們決定每天早上一同晨練來享受在一起的時光.他們畫出了晨練路線的草圖,眼尖的小t發現可以用樹來描繪這個草圖.他們不願枯燥的每天從同乙個地方開始他們的鍛鍊,所以他們準備給起點標號後順序地從每個起點開始 第一天從起點一開始,第二天從起點二...