loj#P4820. 「KTSC 2025 R2」编号游戏

「KTSC 2025 R2」编号游戏

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

请在提交源代码前添加 #include "numbering.h"

题目描述

题目译自 2025년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T3 「넘버링

KOI 城市由 NN 个交叉口和 MM 条双向道路组成,你可以通过这些道路在任意两个不同交叉口之间自由往来。值得注意的是,连接同一对交叉口的双向道路可能不止一条。

每个交叉口被分配了一个从 00N1N-1 的独一无二的编号,每条道路也被分配了一个从 00M1M-1 的独特编号。

如果一个长度为 NN 的整数数组 a[0],a[1],,a[N1]a[0], a[1], \cdots, a[N-1] 满足以下条件,我们就称它为好编号

  • 对于任何一条不重复经过同一道路的路径,按访问顺序列出交叉口的编号为 u0,u1,,ul1u_{0}, u_{1}, \ldots, u_{l-1},对应的数组值要么满足 a[u0]a[u1]a[ul1]a[u_{0}] \leq a[u_{1}] \leq \ldots \leq a[u_{l-1}](单调递增),要么满足 a[u0]a[u1]a[ul1]a[u_{0}] \geq a[u_{1}] \geq \ldots \geq a[u_{l-1}](单调递减)。注意,路径上可以多次经过同一个交叉口。

一个长度为 NN 的整数数组 a[0],a[1],,a[N1]a[0], a[1], \cdots, a[N-1]多样性定义为满足 a[u]a[v]a[u] \neq a[v]0u<vN10 \leq u < v \leq N-1(u,v)(u, v) 对的数量。

现在,给你 KOI 城市的道路网络结构,你需要编写程序,找出所有好编号中多样性的最大值。

实现细节

你需要实现以下函数:

long long max_diversity(int N, int M, vector<int> U, vector<int> V)
  • N:交叉口的数量。
  • M:道路的数量。
  • U, V:对于所有 0iM10 \leq i \leq M-1,第 ii 条道路连接 U[i]U[i] 号交叉口和 V[i]V[i] 号交叉口,且 U[i]V[i]U[i] \neq V[i]
  • 函数需返回所有好编号中多样性的最大值。

你提交的代码中不得包含任何输入输出函数。

样例

假设 N=5N = 5M=5M = 5U=[0,0,1,1,2]U = [0, 0, 1, 1, 2]V=[1,2,2,3,4]V = [1, 2, 2, 3, 4]

评测程序调用:

max_diversity(5, 5, [0, 0, 1, 1, 2], [1, 2, 2, 3, 4])

  • a=[2,1,1,3,1]a = [2, 1, 1, 3, 1] 不是好编号。例如路径 0130 \to 1 \to 3,对应 a[0]=2,a[1]=1,a[3]=3a[0] = 2, a[1] = 1, a[3] = 3,既非递增(2>1<32 > 1 < 3)也非递减。
  • a=[1,1,1,1,1]a = [1, 1, 1, 1, 1] 是好编号,多样性为 00(无不同值对)。
  • a=[2,2,2,3,0]a = [2, 2, 2, 3, 0] 是好编号,多样性为 77(不同值对有 $(0, 3), (1, 3), (2, 3), (3, 4), (0, 1), (0, 2), (1, 2)$)。

通过分析,所有好编号的多样性最大值为 77,因此函数应返回 77

数据范围与提示

对于所有输入数据,满足:

  • 2N10000002 \leq N \leq 1000000
  • 1M20000001 \leq M \leq 2000000
  • 对于所有 0iM10 \leq i \leq M-1U[i]V[i]U[i] \neq V[i]
  • 对于所有 0iM10 \leq i \leq M-10U[i],V[i]N10 \leq U[i], V[i] \leq N-1

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 11 M=N1M = N - 1;不存在与 44 条或更多道路相邻的交叉口;N500N \leq 500
22 44 M=N1M = N - 1;不存在与 44 条或更多道路相邻的交叉口;N5000N \leq 5000
33 55 M=N1M = N - 1;不存在与 44 条或更多道路相邻的交叉口
44 33 M=N1M = N - 1N500N \leq 500
55 55 M=N1M = N - 1N5000N \leq 5000
66 2828 M=N1M = N - 1
77 66 N500N \leq 500M1000M \leq 1000
88 1010 N5000N \leq 5000M10000M \leq 10000
99 3838 无附加限制

示例评测程序

示例评测程序接收以下格式的输入:

  • 11 行:N MN\ M
  • 2+i2+i (0iM1)(0 \leq i \leq M-1) 行:U[i] V[i]U[i]\ V[i]

输出格式如下:

  • 11 行:max_diversity 的返回值

请注意,示例评测程序可能与实际评测程序有所不同。