#P14252. [集训队互测 2025] 集你太美

[集训队互测 2025] 集你太美

题目背景

人面不知何处去,桃花依旧笑春风。

题目描述

给定一张 n n 个结点的无向完全图 G G ,边 (i,j) (i, j) 带非负整数权 vi,j v_{i,j} ,保证 vi,i=0 v_{i,i} = 0 vi,j=vj,i v_{i,j} = v_{j,i}

同时,每个结点有一个非负整数变量 wi w_i

定义对一个点 i i 进行一次收集操作为,将 wi w_i 的值加上 jvi,j \sum_j v_{i,j} ,并将 wj w_j 的值减去 vi,j v_{i,j} 。称一次对点 i i 的收集操作合法,当且仅当操作前 wjvi,j w_j \ge v_{i,j}

在图 G G 上称一组点权收集-free,当且仅当以这组点权为初始状态,存在一种方式,能够进行无限次合法的收集操作。

你有两种任务。第一种,构造一组点权 wi w'_i ,使得 wi w'_i 收集-free,且最小化 iwi \sum_i w'_i ;第二种,给定一组点权 wi w'_i ,你需要判断 wi w'_i 是否 收集-free。

输入格式

第一行一个正整数 o o ,表示你的任务类型。

第二行一个正整数 n n 和一个非负整数 m m ,表示 G G 的结点数和边权非 0 的边数。

接下来的 m m 行,每行 3 个正整数 i,j,v i, j, v ,表示在 i i j j 间的边边权为 v v

o=2 o = 2 ,接下来有一行 n n 个非负整数 wi w'_i ,代表你需要判断是否 收集-free 的一组点权。

输出格式

o=1 o = 1 ,输出一行 n n 个非负整数 wi w'_i ,代表你构造的点权。你应当保证 0wi1018 0 \le w'_i \le 10^{18}

o=2 o = 2 ,输出一行 YES 或 NO,代表 wi w'_i 是否 收集-free。

1
5 6
1 2 1
1 5 1
2 3 1
2 5 1
3 4 1
3 5 1
2 2 0 1 1
2
5 6
1 2 1
1 5 1
2 3 1
2 5 1
3 4 1
3 5 1
3 3 1 2 2
YES

提示

样例解释

当初始点权与样例输出 1 中构造的一致时,可以发现依次操作 3,5,4,2,3,4,1,5,2,1 3, 5, 4, 2, 3, 4, 1, 5, 2, 1 号点后,所有点的点权与初始情况一致,且这些操作均合法,故可以进行无限次合法的收集操作。

容易注意到,样例输入 2 给出的点权为样例输出 1 中构造的点权 +1+1,故显然合法。

提示

在下发文件中含有 checker.exe(linux 格式下为 checker),你可以使用它来验证你的输出是否正确。具体的使用方式为 checker collect.in collect.out collect.out,其中 collect.incollect.out 为与 checker.exe 在相同目录下的输入输出文件。

返回值 信息
0 输出正确
1 你构造的方案中 wi \sum w'_i 比正确的更小
2 你构造的方案中 wi \sum w'_i 比正确的更大
3 你构造的方案不是 收集-free 的
4 你输出了 YES 和 NO 以外的字符串
5 你对于是否 收集-free 的判断错误

限制与约定

对于所有数据,o{1,2} o \in \{1, 2\} 1n3×105 1 \le n \le 3 \times 10^5 ,$ 0 \le m \le \min\left(10^6, \frac{1}{2}n(n-1)\right) $,1i<jn 1 \le i < j \le n (i,j) (i, j) 互不相同,1v109 1 \le v \le 10^9 0wi1018 0 \le w'_i \le 10^{18}

注意在某些数据中,只考虑边权非 0 的边的情况下,图可能不连通。

Subtask 编号 n n 的上界 m m 的上界 特殊性质 分值
1 1010 2020 无特殊性质 1010
2 2020 100100 ^
3 300300 20002000
4 3×1053\times 10^5 n1 n - 1 o=1 o = 1 ,非 00 边构成一棵树
5 ^ min(106,12n(n1))\min\left(10^6, \frac{1}{2}n(n-1)\right) o=1 o = 1 3030
6 ^ o=2 o = 2 2020
7 无特殊性质 1010