題目鏈結
詢問樹鏈資訊的時候,因為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 表示點數和運算元。接下來一...