題意:給出一棵樹,每條邊都有乙個長度。我們規定每個點的權值為從該點開始走過的一條最長的路徑的長度。
求乙個最長的區間[l,r],使得[l,r]裡面點權的最大值和最小值只差不超過m。
n<=1000000
一開始看錯題目了,結果卡了半天。。最後發現是一道大水題。
先求點權,直接dp求,經典模型啊。。隨便寫。
後面求出點權之後,單調佇列就更簡單了,隨便搞。
然後等我切了以後看別人的題解才發現要求個次長路防止從父親走過的最長路經過兒子,結果直接切了,這就很尷尬了、、、
code(**的帶了次長路的**):
#include#include#include#include#include#define n 1000005
using namespace std;
int n,m,last[n],cnt;
struct edgee[n*2];
struct stackstack1[n],stack2[n];
struct datafir[n],sec[n];
void addedge(int u,int v,int
len)
void dfs1(int x,int fa)
else
if (fir[e[i].to].len+e[i].len>sec[x].len)
}}void dfs2(int x,int fa,int
len)
else
if (w>sec[x].len)
for (int i=last[x];i;i=e[i].next)
}int main()
dfs1(1,0);
dfs2(1,0,0);
int head1=1,tail1=0,head2=1,tail2=0,l=1,ans=0;
for (int i=1;i<=n;i++)
else
ans=max(ans,i-l+1);
}printf("%d",ans);
return 0;
}
bzoj 2500 幸福的道路
link 幸福的道路 題目有坑.題意 一棵樹 求出每個點到樹上另外乙個點的最大距離 在距離陣列上求出最長一段連續的區間使其極差 s 求區間長度最大值。題目說的標號的意思就是指樹上的標號 而不是重新的標號。求樹上某個點到另外乙個點的最大值 沒有什麼好的辦法 通常都是樹形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發現可以用樹來描繪這個草圖.他們不願枯燥的每天從同乙個地方開始他們的鍛鍊,所以他們準備給起點標號後順序地從每個起點開始 第一天從起點一開始,第二天從起點二...