bzoj4034 HAOI2015 樹上操作

2021-08-10 13:57:03 字數 1529 閱讀 7234

題目鏈結

詢問樹鏈資訊的時候,因為top,deep,pre陣列都是建立在原樹上的

所以傳入的是原樹上的結點編號(輸入編號)

這道題也算是乙個史前巨坑了,以前一直a不了

今天終於一a了

開ll

//這裡寫**片

#include

#include

#include

#define ll long long

using

namespace

std;

const

int n=100010;

int pre[n],top[n],son[n],size[n],out[n],num[n],shu[n],clo=0,deep[n];

int n,m;

ll a[n];

struct tree;

tree t[n<<2];

struct node;

node way[n<<1];

int st[n],tot=0;

void add(int u,int w)

void dfs_1(int now,int fa,int dep)

}}void dfs_2(int now,int fa)

out[now]=clo;

}void update(int bh)

void push(int bh)

}void build(int bh,int l,int r)

int mid=(l+r)>>1;

build(bh<<1,l,mid);

build((bh<<1)+1,mid+1,r);

update(bh);

}void add(int bh,int l,int r,ll z)

int mid=(t[bh].x+t[bh].y)>>1;

if (l<=mid) add(bh<<1,l,r,z);

if (r>mid) add((bh<<1)+1,l,r,z);

update(bh);

}ll ask(int bh,int l,int r)

int mid=(t[bh].x+t[bh].y)>>1;

ll ans=0;

if (l<=mid) ans+=ask(bh<<1,l,r);

if (r>mid) ans+=ask((bh<<1)+1,l,r);

return ans;

}ll asksum(int u,int w)

if (num[u]>num[w]) swap(u,w);

ans+=ask(1,num[u],num[w]);

return ans;

}int main()

dfs_1(1,0,1);

dfs_2(1,0);

build(1,1,n);

for (int i=1;i<=m;i++)

else

if (opt==2)

else

}return

0;}

bzoj4034 HAOI2015 樹上操作

傳送門 description 有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個 操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作 2 把某個節點 x 為根的子樹中所有點的點權都增加 a 操作 3 詢問某個節點 x 到根的路徑中所有點的點權和。input 第一行包含...

bzoj 4034 HAOI2015 樹上操作

4034 haoi2015 樹上操作 time limit 10 sec memory limit 256 mb submit 4216 solved 1340 submit status discuss description 有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個 ...

BZOJ 4034 HAOI2015 樹上操作

有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個 操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作 2 把某個節點 x 為根的子樹中所有點的點權都增加 a 操作 3 詢問某個節點 x 到根的路徑中所有點的點權和。第一行包含兩個整數 n,m 表示點數和運算元。接下來一...