背景:爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。
題意:給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。
爍爍他每次會跳到乙個節點u,把周圍與他距離不超過d的節點各吸引出w只皮皮鼠。皮皮鼠會被爍爍吸引,所以會一直待在節點上不動。
爍爍很好奇,在當前時刻,節點u有多少個他的好朋友---皮皮鼠。
大意:給一顆n個節點的樹,邊權均為1,初始點權均為0,m次操作:
q x:詢問x的點權。
m x d w:將樹上與節點x距離不超過d的節點的點權均加上w。
第一行兩個正整數:n,m
接下來的n-1行,每行三個正整數u,v,代表u,v之間有一條邊。
接下來的m行,每行給出上述兩種操作中的一種。
對於每個q操作,輸出當前x節點的皮皮鼠數量。
7 61 2
1 41 5
2 32 7
5 6m 1 1 2
q 5m 2 2 3
q 3m 1 2 1
q 2236
資料範圍:
n,m<=10^5,|w|<=10^4
注意:w不一定為正整數,因為爍爍可能把皮皮鼠嚇傻了。
裸的動態樹分治,和震波很像啊(時限寬鬆多了)。
套個支援區間增加的線段樹就行了。
陣列開小結果re2次(tat)。
前面10s的太強了。
#include#includeview code#include
#include
#include
#include
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using
namespace
std;
inline
intread()
const
int maxn=200010
;const
int maxnode=20000010
;int n,m,first[maxn],next[maxn<<1],to[maxn<<1
],e;
void addedge(int u,int
v) int val[maxn],mn[maxn<<1][20],log[maxn<<1
],dep[maxn],pos[maxn],cnt;
void dfs(int x,int
fa)
void
init()
int dist(int x,int
y) int
vis[maxn],f[maxn],s[maxn],root,size;
void getroot(int x,int
fa)
f[x]=max(maxs,size-s[x]);
if(f[root]>f[x]) root=x;
}int
fa[maxn];
void build(int
x) }
intls[maxnode],rs[maxnode],addv[maxnode],tot;
introot1[maxn],root2[maxn];
void update(int& o,int l,int r,int ql,int qr,int
v) }
int query(int& o,int l,int r,int pos,int
cur)
void update(int x,int w,int
v) }
}int query(int
x)
return
res;
}int
main()
}return0;
}
BZOJ 4372 爍爍的遊戲
背景 爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。題意 給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。爍爍他每次會跳到乙個節點u,把周圍與他距離不超過d的節點各吸引出w只皮皮鼠。皮皮鼠會被爍爍吸引,所以會一直待在節點上不動。爍爍很好奇,在當前時刻,節點u有多少個他的好朋友 皮皮鼠。大意 給一顆n個...
BZOJ 4372 爍爍的遊戲 動態點分治
time limit 30 sec memory limit 512 mb submit 804 solved 288 submit status discuss 背景 爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。題意 給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。爍爍他每次會跳到乙個節點u,把周...
BZOJ4372 爍爍的遊戲 動態點分治
題目描述 給一顆n個節點的樹,邊權均為1,初始點權均為0,m次操作 q x 詢問x的點權。m x d w 將樹上與節點x距離不超過d的節點的點權均加上w。n,m 105,w 104 題目分析 每個點分中心維護乙個樹狀陣列記錄對子樹某個距離的加權,再維護乙個記錄點分樹上的父親由自己這棵子樹貢獻上去的加...