poj 3321(dfs序&&树状数组)

第一次知道dfs序这个东西,可以维护树上的任意一个节点,以这个节点为根的子树上的所有节点的标号。是连续的一段区间。

一棵子树的所有节点在dfs序里是连续一段,主要就是利用这个性质来解题

然后就是树状数组维护区间内苹果的数量

另外这个题很卡时间,我用了输入输出挂才过

#include
#include
using namespace std;
const int maxn = 100000+10;
vectorG[maxn];
int l[maxn],r[maxn];
int tree[maxn];
char op[5];
int x,key,n;
inline int in()
{
    char ch;
    int a = 0;
    while((ch = getchar()) == ' ' || ch == '\n');
    a += ch - '0';
    while((ch = getchar()) != ' ' && ch != '\n')
    {
        a *= 10;
        a += ch - '0';
    }
    return a;
}
void dfs(int u)
{
    l[u] = key;
    int len = G[u].size();
    for(int i=0;i= 10)
    {
       Out(a / 10);
    }
    putchar(a % 10 + '0');
}
int main()
{
    int u,v;
    n = in();
    for(int i=1;i


你可能感兴趣的:(树)