poj 3321 樹狀陣列

2021-06-22 19:41:15 字數 852 閱讀 9494

首先對數進行dfs一下,前序優先遍歷,這樣做的目的是令節點i的子節點的編號組成的集合是一段連續的數,這樣在查詢的時候就能夠用樹狀陣列來查詢連續的區間的和

ac**如下:

#include #include #include #include using namespace std;

const int max_n = 100000 + 5;

struct edge;

edge edge[max_n*4];

int head[max_n], tot;

int n;

int sum[max_n], statu[max_n];

int st[max_n], ed[max_n];

int now_id;

void add_edge( int a, int b )

inline int lowbit( int x )

int getsum( int x )

return ans;

}void updata( int x, int val )

}void dfs( int x )

ed[x] = now_id;

}int main()

now_id = 0;

dfs( 1 );

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

scanf( "%d", &m );

char s[10];

int t;

for( int i = 0; i < m; i++ )elseelse

statu[t] ^= 1;}}

}return 0;

}

POJ 3321 樹狀陣列

題意 給定一棵樹,某些節點上有蘋果,多次詢問各子樹上的節點數,並且在詢問的中途隨時可能新增和刪除蘋果。分析 dfs遍歷樹的同時,對每個點標註時間,每個點有乙個開始時間和乙個結束時間,把這兩個時間當做下標,該點的蘋果個數 1或0 填入陣列的兩個對應位。子樹中結點的時間段一定是根節點時間段的子段,所以求...

poj3321 樹狀陣列 Apple Tree

description input output for every inquiry,output the correspond answer per line.sample input 3 1 21 3 3q 1 c 2q 1 sample output3 2source poj monthly ...

poj 3321 樹狀陣列 dfs對映

思路 將乙個樹對映成樹狀陣列,用dfs 對圖中的蘋果樹進行遍歷 dfs遍歷順序i13 452start i 12 345end i 54 345 start 就是dfs遍歷的順序,也可以理解為dfs呼叫時入棧的時間,同理,end表示dfs呼叫結束時即退棧的時間。這樣求1號樹叉上的蘋果總數就是求從1到...