poj3321Apple Tree(樹狀陣列)

2022-05-16 16:23:12 字數 862 閱讀 7303

剛一看題以為要建一顆樹 看了下討論說dfs

這裡dfs遍歷時設的標號很好 乙個low乙個high 包含了以這一節點為根節點的子樹結點的所有標號

1 #include 2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define n 100010

8#define lowbit(x) (x&(-x))

9struct

node

10ed[n<<1

];13

inthead[n],t,low[n],g,high[n],vis[n],re[n],f[n];

14void

init()

1519

void add(int u,int

v)20

27void dfs(int

u)28

38 high[u] =g;39}

40void add1(int i,int

da)4147}

48int getsum(int

i)49

56return

sum;57}

58int

main()

5970 dfs(1

);71

for(i = 1 ; i <= g ; i++)

7276 scanf("

%d",&m);

77while(m--)

7884

else

8589}90

return0;

91 }

view code

POJ 3321 樹狀陣列

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

poj 3321 樹狀陣列

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

poj 3321 Apple Tree(樹狀陣列)

輝煌北大的月賽題質量真高啊,這種樹狀陣列真難想到。樹狀陣列的基本用法是區間,單點的應用,起初這個怎麼都想不到如何套用到樹狀陣列。轉化方法是 將樹上的節點資訊查詢,轉為深度優先中節點順序 代表結點編號 進結點與出結點分別代表該結點管轄範圍。題目大意級是說,給你一顆樹,最初每個節點上都有乙個蘋果,有兩種...