BZOJ3999 旅遊,樹鏈剖分中的有向資訊合併

2021-07-12 02:26:08 字數 1968 閱讀 7090

time:2016.05.26

author:xiaoyimi

傳送門思路:

(調了好久發現是鏈剖打錯了)

線性版本的話可以去看水果姐逛水果店ⅰ

這個放到了樹上,還加了個修改操作

先鏈剖,再維護最大值及最小值,左->右最大差值,右->左最大差值

區間修改打標記

線段樹上的連續區間維護起來很好辦

關鍵就在於怎麼維護詢問中訪問的所有鏈的資訊

之前沒有寫過類似這樣的,向char哥學習了一下,具體就是線段樹查詢時返回線段樹的資料型別的節點,來儲存和維護資訊。

細節資訊個人推薦看**

注意:

很容易把左右,大小,深淺這些東西搞混了……最後就不知所措= =

**:

#include#include#include#define m 50003

#define inf 0x7ffffff

using namespace std;

int n,q,tot,cnt;

int w[m],fa[m],son[m],siz[m],top[m],dep[m],l[m],pre[m],first[m],lazy[m<<2];

struct edgee[m<<1];

struct seg

tree[m<<2];

seg null=;

intin()

void add(int x,int y)

;first[x]=tot;

e[++tot]=(edge);first[y]=tot;

}void dfs1(int x)

void dfs2(int x,int tp)

void pushup(int now)

void pushdown(int now)

void build(int now,int begin,int end)

; return;

}int mid=begin+end>>1;

build(now<<1,begin,mid);

build(now<<1|1,mid+1,end);

pushup(now);

}void update(int now,int begin,int end,int l,int r,int val)

pushdown(now);

int mid=begin+end>>1;

if (mid>=l) update(now<<1,begin,mid,l,r,val);

if (mid1|1,mid+1,end,l,r,val);

pushup(now);

}seg get(int now,int begin,int end,int l,int r)

main()

if (dep[x]<=dep[y])

t=get(1,1,n,l[x],l[y]),

ans_r.sum_r=max(max(ans_r.sum_r,t.sum_r),ans_r.maxn-t.minn),

ans_r.maxn=max(ans_r.maxn,t.maxn),

ans_r.minn=min(ans_r.minn,t.minn),

update(1,1,n,l[x],l[y],z);

else

t=get(1,1,n,l[y],l[x]),

ans_l.sum_l=max(max(ans_l.sum_l,t.sum_l),t.maxn-ans_l.minn),

ans_l.maxn=max(ans_l.maxn,t.maxn),

ans_l.minn=min(ans_l.minn,t.minn),

update(1,1,n,l[y],l[x],z);

printf("%d\n",max(ans_r.maxn-ans_l.minn,max(ans_l.sum_l,ans_r.sum_r)));

}}

BZOJ 2157 旅遊 樹鏈剖分

ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...

BZOJ2157 旅遊 樹鏈剖分

ray 樂忠於旅遊,這次他來到了t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹窄泥...

BZOJ2157 旅遊,樹鏈剖分練習

傳送門 寫在前面 模擬賽中ca爺卡我記憶體,暴力100變60 不過還是親學長 畢竟在我初中的時候就是學長 每次做ca爺的題都是高分 思路 迄今做的最爽的樹鏈剖分 被char哥帶著做這道題,結果耗了好久時間調好,這應該是第一次寫邊鏈剖了?與點鏈剖不同的是要處理下邊 深度大的變成入點 然後建樹時,這個入...