對一棵樹(初始只有 0 號節點,權值為 0)進行操作和詢問:
操作 1:輸入格式1 i,表示使節點 i 長出了乙個新的兒子節點,權值為0,編號為當前最大編號 +1(也可以理解為,當前是第幾個操作 1,新節點的編號就是多少)。
操作 2:輸入格式 2 i a,表示華華上線做任務使節點 i 的子樹中所有節點(即它和它的所有子孫節點)權值加 a 。
詢問 3:輸入格式3i,華華需要給出 i 節點此時的權值。
先將樹變成dfs序,然後就是樹狀陣列了。當在節點 i 進行操作 2 的時候,就相當 [ dfn[i] , dfn[i]+sz[i]-1 ]範圍加上a。當進行操作 1 的時候,只需要把新加入的節點權值變成0即可。
1 #include 2using
namespace
std;34
const
int maxn=1e5+10
;5 vectorv[maxn];
6int
n,m,cnt;
7int
dfn[maxn];//dfs序,相當於節點在樹狀陣列中的下標
8int sz[maxn]; //sz[i] 表示節點 i 為根的子樹的所有節點數z
9int
tree[maxn];
10struct
query
11q[maxn<<2
];14
15int sum(int
x)16
23return
s;24}25
26void update(int x,int
s)2733}
3435
void dfs(int
u)3644}
4546
void
solve()
56else
if(q[i].op==2
)57 scanf("
%d",&q[i].a);58}
59 dfs(0
);60
for(int i=0;i)
6168
else
if(q[i].op==2)69
73else
74 printf("
%d\n
",sum(dfn[q[i].i]));75}
76}7778
signed main()
華華和月月種樹
時間限制 c c 2秒,其他語言4秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 華華看書了解到,一起玩養成類的遊戲有助於兩人培養感情。所以他決定和月月一起種一棵樹。因為華華現在也是資訊學高手了,所以他們種的樹是資訊學意義下的。華華和月月一起維護...
華華和月月種樹(牛客)
題意 華華看書了解到,一起玩養成類的遊戲有助於兩人培養感情。所以他決定和月月一起種一棵樹。因為華華現在也是資訊學高手了,所以他們種的樹是資訊學意義下的。華華和月月一起維護了一棵動態有根樹,每個點有乙個權值。剛開存檔的時候,樹上只有 0 號節點,權值為 0 接下來有兩種操作 操作 1 輸入格式1 i,...
華華和月月逛公園 tarjin求割邊 模板
月月和華華一起去逛公園了。公園很大,為了方便,可以抽象的看成乙個n個點m條邊的無向連通圖 點是景點,邊是道路 公園唯一的入口在1號點,月月和華華要從這裡出發,並打算參觀所有的景點。因為他們感情很好,走多遠都不會覺得無聊,所以所有景點和道路都可以無數次的重複經過。月月發現,有些路可走可不走,有些路則必...