bzoj1984 月下「毛景樹」

2021-08-08 21:46:17 字數 2284 閱讀 9373

傳送門

果然強校出的題都有坑= =

好吧其實是我太弱

都知道化邊權為點權了還沒發現鏈上查詢和修改時的坑

知道了這個這題就是板子題了= =

code:

#include#includeusing namespace std;

#define n 100005

struct tree

t[n<<2];

int f[n],deep[n],size[n],son[n],top[n],pos[n],s[n],point[n],num[n];

char str[10];

int n,m,x,y,z,tot;

vector v[n],w[n],id[n];

inline int max(const

int &a,const

int &b)

inline int min(const

int &a,const

int &b)

inline int read()

inline bool getstring()

void dfs(int

now,int fa,int depth)

}void dfs2(int

now,int high)

inline void pushdown(int

now)

if(t[now].plus)

}inline void update(int

now)

void build(int l,int r,int

now)

intmid=(l+r)>>1;

build(l,mid,now

<<1);

build(mid+1,r,now

<<1|1);

update(now);

}void add(int l,int r,int l,int r,int

now,int num)

intmid=(l+r)>>1;

pushdown(now);

if(l<=mid) add(l,r,l,mid,now

<<1,num);

if(r>mid) add(l,r,mid+1,r,now

<<1|1,num);

update(now);

}void change(int l,int r,int l,int r,int

now,int num)

intmid=(l+r)>>1;

pushdown(now);

if(l<=mid) change(l,r,l,mid,now

<<1,num);

if(r>mid) change(l,r,mid+1,r,now

<<1|1,num);

update(now);

}int ask(int l,int r,int l,int r,int

now)

inline void addpath(int x,int y,int z)

if(x==y) return;

if(deep[x]>deep[y]) swap(x,y);

int tmp=ask(pos[x],pos[x],1,n,1);

add(pos[x],pos[y],1,n,1,z);

change(pos[x],pos[x],1,n,1,tmp);

}inline void changepath(int x,int y,int z)

if(x==y) return;

if(deep[x]>deep[y]) swap(x,y);

int tmp=ask(pos[x],pos[x],1,n,1);

change(pos[x],pos[y],1,n,1,z);

change(pos[x],pos[x],1,n,1,tmp);

}inline int askpath(int x,int y)

if(x==y) return ans;

if(deep[x]>deep[y]) swap(x,y);

int tmp=ask(pos[x],pos[x],1,n,1);

change(pos[x],pos[x],1,n,1,0);

ans=max(ans,ask(pos[x],pos[y],1,n,1));

change(pos[x],pos[x],1,n,1,tmp);

return ans;

}int main()

return 0;

}

BZOJ1984 月下「毛景樹」

time limit 20 sec memory limit 64 mb submit 1583 solved 500 submit status discuss 毛毛蟲經過及時的變形,最終逃過的一劫,離開了菜媽的菜園。毛毛蟲經過千山萬水,歷盡千辛萬苦,最後來到了小小的紹興一中的校園裡。爬啊爬 爬啊...

BZOJ1984 月下「毛景樹」

題目 月下 毛景樹 解析 樹鏈剖分。注意一下線段樹的標記下傳的問題,先下傳覆蓋標記再下傳增加標記,且下傳覆蓋標記後要將增加標記取消。詳見 算了還是說下問什麼這樣下傳標記吧。如果先下傳add再下傳cover,你會發現對於修改同一區間,操作順序是先add再cover時下傳沒有問題,但如果是先cover再...

BZOJ 1984 月下「毛景樹」

演算法 樹鏈剖分 線段樹 題解 線段樹的區間加值和區間覆蓋操作不能同時存在,只能存在乙個。修改 從根節點跑到目標區域路上的標記全部下傳,打完標記再上傳回根節點 有變動才需要上傳 詢問 訪問到目標區域路上的標記全部下傳。我寫的線段樹版本是在打標記的同時便對該點的詢問項 最大值 做了對應更改,即可保證訪...