AT_agc025_e [AGC025E] Walking on a Tree
题目描述
[problemUrl]: https://atcoder.jp/contests/agc025/tasks/agc025_e
高桥君非常喜欢在树上散步。高桥君散步的树由 $N$ 个顶点组成,每个顶点被编号为 $1$ 到 $N$。此外,$N-1$ 条边中的第 $i$ 条边连接顶点 $a_i$ 和顶点 $b_i$。
高桥君计划进行 $M$ 次散步。第 $i$ 次散步将按以下方式进行:
- 确定两个顶点 $u_i$ 和 $v_i$。
- 高桥君将从顶点 $u_i$ 移动到顶点 $v_i$,或者从顶点 $v_i$ 移动到顶点 $u_i$,且同一条边不会被重复经过。
此外,第 $i$ 次散步的*乐趣*定义如下:
- 在第 $i$ 次散步中经过的边中,满足以下任一条件的边的数量:
- 本次散步中首次经过的边;
- 之前曾经经过但仅以相反方向经过的边。
高桥君希望通过为每次散步选择方向,使得 $M$ 次散步的总乐趣最大化。因此,请计算高桥君能够获得的最大总乐趣,并给出一个实际使总乐趣最大的散步方向设定示例。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $M$
> $a_1$ $b_1$
> $\vdots$
> $a_{N-1}$ $b_{N-1}$
> $u_1$ $v_1$
> $\vdots$
> $u_M$ $v_M$
输出格式
输出高桥君能够获得的最大总乐趣 $T$,以及一个实际使总乐趣最大的散步方向设定示例,格式如下:
> $T$
> $u'_1$ $v'_1$
> $\vdots$
> $u'_M$ $v'_M$
其中,$(u'_i, v'_i)$ 为 $(u_i, v_i)$ 或 $(v_i, u_i)$,表示第 $i$ 次散步将从 $u'_i$ 移动到 $v'_i$。
说明/提示
### 约束条件
- $1 \leq N, M \leq 2000$
- $1 \leq a_i, b_i \leq N$
- $1 \leq u_i, v_i \leq N$
- $a_i \neq b_i$
- $u_i \neq v_i$
- 输入给出的图是一棵树。
### 样例解释 #1
按照上述方式设定散步方向后,每次散步可以获得 $2$ 点乐趣,总乐趣为 $6$。
翻译由 DeepSeek V3 完成