hdu3887(dfs序)

问你对于每个节点,它的子树上标号比它小的点有多少个

子树的问题,dfs序可以很轻松的解决,因为点在它的子树上,所以在线段树中,必定在它的两个时间戳的区间之间,所以我们只需要从小到大考虑,它的区间里有多少个点已经放了,然后再把它放进去。很容易的解决了

#include
#include
#include
using namespace std;
const int maxn = 100000+10;
vectorG[maxn];
int n,p,t;
int l[maxn],r[maxn],tree[maxn];
void dfs(int u,int fa)
{
    l[u]  = ++t; int len = G[u].size();
    for(int i=0;i


你可能感兴趣的:(树)