题解 - Luogu P10309 「Cfz Round 2」Max of Distance

简述题意

给定一棵包含 nn 个结点的树和一个整数 EE。构造树中每条边的整数边权 wi(1wi109)w_i(1\le w_i\le 10^9),满足均匀随机选择一个结点 uumaxv=1ndis(u,v)\max\limits_{v=1}^n\operatorname{dis}(u,v) 的期望对 998244353998244353 取模的值等于 EE;或报告无解。2n1052\le n\le 10^51ui,vin1 \le u_i,v_i \le n0E<9982443530\le E < 998244353

分析

我们发现题目中的关键点既有 max\max,又有期望,还有取模。就可以猜这个 max\max 是这其中关键要着手的。

一般地,树上的 maxv=1ndis(u,v)\max\limits_{v=1}^n\operatorname{dis}(u,v) 取到的 vv 是一个直径的端点,是一个叶子;那么,我们就直接钦定一个 vv,让其他点都是到 vv 最远,而 vv 走直径就可以了。

具体的办法就是,随便选一个叶子 vv,把与 vv 相连的唯一一条边设定一个 n\ge n 的权值,而其他的边权都设为 11。接下来只需要求出这个权值 ww

由题意,我们有 w+1n(maxuvdu+uvdu)E(mod998244353)w+\frac{1}{n}(\max_{u\neq v} d_u + \sum_{u\neq v} d_u)\equiv E\pmod {998244353},其中 dud_u 表示以 vv 为根,uu 点的深度 1-1

dd 可以直接通过 dfs 求出来,那么 ww 也就容易得到了。

最后为了确认满足这条边必走,如果 w<nw<n,就让 ww 加上 998244353998244353,这样也不会超出 10910^9

由以上的构造,可以发现恒有解。

时间复杂度 O(n+logV)O(n+\log V)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <bits/stdc++.h>
using namespace std;

const int MXN = 100005;
const int DVS = 998244353;
int N, deg[MXN], eid[MXN], E, spid, mxd, diff;
vector<int> to[MXN];

void dfs(int p, int f, int d) {
mxd = max(mxd, d);
if (f != -1) diff = (diff + d - 1) % DVS;
for (int q : to[p]) {
if (q == f) continue;
dfs(q, p, d + 1);
}
}
int inv(int x) {
int p(DVS - 2), a(1);
while (p) {
if (p & 1) a = a * 1LL * x % DVS;
x = x * 1LL * x % DVS;
p >>= 1;
}
return a;
}

int main() {
cin >> N;
for (int i(1), x(0), y(0); i != N; ++i) {
cin >> x >> y;
--x, --y;
++deg[x], ++deg[y];
eid[x] = eid[y] = i;
to[x].push_back(y);
to[y].push_back(x);
}
cin >> E;
for (int i(0); i != N; ++i) {
if (deg[i] != 1) continue;
spid = eid[i];
dfs(i, -1, 0);
diff = (diff + mxd - 1) % DVS;
break;
}
diff = diff * 1LL * inv(N) % DVS;
E = (E - diff + DVS) % DVS;
if (E < N) E += DVS;
for (int i(1); i != N; ++i) {
if (i == spid) cout << E << endl;
else cout << '1' << endl;
}
return 0;
}

题解 - Luogu P10309 「Cfz Round 2」Max of Distance
http://sunsetglow95.github.io/sol-LGP10309/
作者
SunsetGlow95
发布于
2024年4月4日
许可协议