不难发现为了逐步确定每个点于其相邻点的相交情况,那么我们只可能有两种逐步构造的方式:从根开始往下构造,以及从子树往根上构造。经过很久的尝试,我发现从根往下构造是一件很困难的事情,于是我们可以反过来考虑第二种构造方式。

既然是从子树开始构造,那么我们先想一下最底层是如何构造的。不难发现最底层实质上是一个菊花图的形式,因为父亲和这些儿子必然有交,那么这些儿子之间一定也会有交,为了让儿子之间不会互相连边,我们只能让所有儿子区间一个包含另一个。为了方便起见,我们让所有儿子的区间和父亲区间的交在左端点,大致如下图所示:

下面继续考虑如何将子树合并。不难发现为了让子树之间不会互相连边,一个最简单的方法就是将不同子树内的点分割开来,但因为所有儿子还是要与父亲连边,因此我们还需将所有儿子构造成上面那种菊花图的形式,具体地大致如下图所示:

不难发现这样刚好用到的点数为 \(2n\) 个,具体实现时从根往儿子递归,传入当前子树内能使用的区间范围即可。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define Next(i, u) for (int i = h[u]; i; i = e[i].next)
const int N = 500000 + 5;
struct edge {
int v, next;
}e[N << 1];
int n, u, v, tot, h[N], l[N], r[N], s[N], sz[N];
int read() {
char c; int x = 0, f = 1;
c = getchar();
while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
void add(int u, int v) {
e[++tot].v = v, e[tot].next = h[u], h[u] = tot;
e[++tot].v = u, e[tot].next = h[v], h[v] = tot;
}
void Prefix(int u, int fa) {
s[u] = 1;
Next(i, u) if(e[i].v != fa) Prefix(e[i].v, u), s[u] += s[e[i].v];
}
void dfs(int u, int fa, int L, int R) {
int ch = 0; sz[u] = 1;
Next(i, u) {
int v = e[i].v; if(v == fa) continue;
++ch, dfs(v, u, L + 2 * sz[u] - ch - 1, L + 2 * sz[u] - ch + 2 * (s[v] - 1));
r[v] = R - ch, sz[u] += sz[v];
}
l[u] = R - ch - 1; if(u == 1) r[u] = R;
}
int main() {
n = read();
rep(i, 1, n - 1) u = read(), v = read(), add(u, v);
Prefix(1, 0), dfs(1, 0, 1, 2 * n);
rep(i, 1, n) printf("%d %d\n", l[i], r[i]);
return 0;
}

CF1278E Tests for problem D的更多相关文章

  1. Unit Tests

    The Three Laws of TDD First Law : you may not write production code until you have written a failing ...

  2. Educational Codeforces Round 78 (Rated for Div. 2) 题解

    Shuffle Hashing A and B Berry Jam Segment Tree Tests for problem D Cards Shuffle Hashing \[ Time Lim ...

  3. Codeforces题解集 1.0

    记录 Codeforces 2019年12月19日到 2020年2月12日 的部分比赛题 Educational Codeforces Round 82 (Rated for Div. 2) D Fi ...

  4. Google Code Jam 2010 Round 1C Problem B. Load Testing

    https://code.google.com/codejam/contest/619102/dashboard#s=p1&a=1 Problem Now that you have won ...

  5. 转:VS2010调试NUnit测试项目 (Running or debugging NUnit tests from Visual Studio without any extensions)

    If you write unit tests and use NUnit test framework this may be helpful. I decided to write this si ...

  6. HDU 4910 Problem about GCD 找规律+大素数判断+分解因子

    Problem about GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. HDOJ 1914 The Stable Marriage Problem

    rt 稳定婚姻匹配问题 The Stable Marriage Problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 6553 ...

  8. 【HDU 5233】Tree chain problem (树形DP+树剖+线段树|树状数组)最大权不相交树链集

    [题目] Tree chain problem Problem Description Coco has a tree, whose vertices are conveniently labeled ...

  9. 【POJ 3487】 The Stable Marriage Problem (稳定婚姻问题)

    The Stable Marriage Problem   Description The stable marriage problem consists of matching members o ...

随机推荐

  1. Notepad++汉化教程

    Notepad++汉化方法总结 Notepad++系统只带了中文语言包,不需要像其他软件一样破解 打开Notepad++(通过文本文件右键选择以Notepad++打开或者找到Notepad++的快捷方 ...

  2. Optimization Landscape and Expressivity of DeepCNNs

    目录 引 主要内容 基本的一些定义 卷积层 全连接层 池化层 改写卷积层 假设2.4 引理2.5 假设3.1 假设3.2 引理3.3 定理3.4 定理3.5 推论3.6 假设4.1 引理4.2 引理4 ...

  3. <数据结构>hash进阶

    hash函数构建 采取26进制 对于字符串str,令**H[i] = H[i-1]*26 + index(str[i]) **,最后H[i-1]就是str的hash值 问题:hash值过大,无法表式 ...

  4. 论文翻译:2020_ACOUSTIC ECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK

    论文地址:https://ieeexplore.ieee.org/abstract/document/9413510 基于双信号变换LSTM网络的回声消除 摘要 本文将双信号变换LSTM网络(DTLN ...

  5. C# 执行Javascript脚本

    前一阵子使用C#编写SCXML状态机,需要解析EMCScript表达式,使用了Jint库(https://github.com/sebastienros/jint/),当时感觉与C#之间的数据转换不是 ...

  6. docker启动emqx官方镜像,顺便启动exporter

    注意,我是把把官方镜像放到了自己的仓库 1.emqx官方镜像启动 docker run -d --name emqx31 -p 1883:1883 -p 8083:8083 -p 8883:8883 ...

  7. Star Way To Heaven

    题目描述 小 x伤心的走上了 Star way to heaven. 到天堂的道路是一个笛卡尔坐标系上一个 n*m的长方形通道 顶点在0,0 和 . 小 n,m 从最左边任意一点进入,从右边任意一点走 ...

  8. Visual Studio Code快速补全html标签(Sublime同样支持)

    1.生成html文件骨架 输入"!" 或 "html:5",按tab键 注意:编写中文网页,记得把头部语言<html lang="en" ...

  9. mysql数据库存放的路径以及安装路径

    mysql数据库存放的路径以及安装路径 1.查看mysql的存放路径 1.查看数据库的存放路径 进入mysql终端 mysql>show variables like '%datadir%'; ...

  10. [ vue ] xxxProject项目杂记

    2020.4.9 加入eCharts 2020.4.8 完成article的显示,其间碰到全局路由守卫写的有错误,导致跳转报错.已修复. 加入keep-alive功能,缓存视图数据 疑问:如果在全局组 ...