一些神奇的东西

一、对一棵树求一个排列, 满足排列的每相邻两个数在这棵树上对应的节点距离不超过3,所有边权均为1

其实yy一会儿可能会有一些想法,但是难写啊!

有一种非常神奇的写法,描述一下是这个样子的

对深度为奇数的点先序遍历,对深度为偶数的点后序遍历

也许正确性没那么显然,但是我们手玩手玩就发现是对的了

大概这么写就行了

void dfs(int now,int typ)
{
        if(typ) s[++tot]=now;
        for(int i=head[now];i;i=Next[i])
            if(to[v]!=f[now])
                dfs(v,typ^1);
        if(typ^1) s[++tot]=now;
}

猜你喜欢

转载自www.cnblogs.com/ppprseter/p/9482444.html