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

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

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

不难发现这样刚好用到的点数为 \(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. ZOJ 3872: Beauty of Array(思维)

    Beauty of Array Time Limit: 2 Seconds Memory Limit: 65536 KB Edward has an array A with N integers. ...

  2. 预训练模型时代:告别finetune, 拥抱adapter

    NLP论文解读 原创•作者 |FLIPPED 研究背景 随着计算算力的不断增加,以transformer为主要架构的预训练模型进入了百花齐放的时代.BERT.RoBERTa等模型的提出为NLP相关问题 ...

  3. 完全替代RTD2166方案设计|CS5202直接替代RTD2166|DP转VGA 方案

    CS5202可以直接PIN TO PIN替代RTD2166 整体方案设计只需改动一个电阻和一个电容,在性能和参数设定方面与RTD2166可以达成一致,且成本比RTD2166要低,性价比更高.CS520 ...

  4. N-Empress

    全排列 基本思想:递归.散列 代码实现 #include<cstdio> const int maxn = 11; int n, P[maxn], hashTable[11] = {fal ...

  5. python+appium运行提示找不到adb.exe “An unknown server-side error occurred while processing the command. Original error: Could not find 'adb.exe' in ["D:\\adt\\sdk;\\platform-tools\\adb.exe"”

    自己踩过的坑,不记下来就会忘掉,忘了就会不断的重复踩坑!! 重来在一台电脑上搭建了python的环境,在运行的时候,提示找不到adb.exe,看到这个问题我在想是不是我的环境变量配置有问题,我就去改了 ...

  6. Python常用功能函数总结系列

    Python常用功能函数系列总结(一) 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 Python常用功能函数系列总结(二) 常用函数 ...

  7. HTML5元素

    1.1结构元素 HTML5定义了一组新的语义化标签,目前主流浏览器均已支持,语义化标签使用标记元素的内容,虽然可以使用原有标签替换,但是它可以简化HTML页面设计,并且也为搜索引擎在抓取和索引网页的时 ...

  8. 一文搞懂Flink Window机制

    Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...

  9. LG1290 欧几里德的游戏

    https://www.luogu.com.cn/problem/P1290 博弈论游戏,用到mod. 辗转相除法的过程,会构成n种状态. 到达最后一个状态就赢了. 对于一次过程如果div>1那 ...

  10. VUE3 之 表单元素

    1. 概述 老话说的好:行动起来,原地观望是没有用的. 言归正传,今天我们来聊聊 VUE3 的 表单元素. 2. 表单元素 2.1 文本框与数据绑定 <body> <div id=& ...