#P11948. [KTSC 2025] 完美编号 / numbering

[KTSC 2025] 完美编号 / numbering

题目背景

版权信息:译自 2025年度 国际情报 올림피아드 (Olympiad) 代表学生 选拔考试 R2T3。[CC BY-NC-SA 4.0]

题目描述

给定 nn 个点 mm 条边的无向连通图 G=(V,E)G=(V,E)。图可能有重边,但没有自环。

点编号 0n10\sim n-1,边编号 0m10\sim m-1

我们称整数数列 a0,a1,,an1a_0,a_1,\ldots,a_{n-1}完美的,当且仅当:

  • 对于任意一条不重复经过一条边(可以重复经过点)的路径,设其依次经过的编号为 u0,u1,,ul1u_0,u_1,\ldots,u_{l-1},则以下条件必须满足:
    • 要么 au0au1aul1a_{u_0}\le a_{u_1}\le \cdots\le a_{u_{l-1}},要么 au0au1aul1a_{u_0}\ge a_{u_1}\ge \cdots\ge a_{u_{l-1}}

定义整数数列 a0,a1,,an1a_0,a_1,\ldots,a_{n-1}不等对数量为满足 auava_u\neq a_v0u<v<n0\le u\lt v\lt n 的二元组 (u,v)(u,v) 的数量。

求出完美数列不等对数量的最大值。

实现细节

你不需要,也不应该实现 main 函数。

你应当实现以下的函数:

long long max_diversity(int n, int m, std::vector<int> U, std::vector<int> V);  
  • n,mn,m:点数和边数。
  • U,VU,V0i<m\forall 0\le i\lt m,都有 (U[i],V[i])E(U[i],V[i])\in E
  • 返回一个非负整数,表示完美数列不等对数量的最大值。

输入格式

Sample Grader 输入格式如下:

第一行,两个正整数 n,mn,m

接下来 mm 行,第 ii 行两个非负整数 U[i1],V[i1]U[i-1],V[i-1]

输出格式

输出一行一个非负整数,表示答案。

5 5
0 1
0 2 
1 2
1 3
2 4
7

提示

样例交互

样例交互 11

$n = 5, m = 5, U = [0, 0, 1, 1, 2],V=[1, 2, 2, 3, 4]$。

a=[2,1,1,3,1]a=[2,1,1,3,1] 不是完美的。取路径 u0=0,u1=1,u2=3u_0=0,u_1=1,u_2=3,则 au0=2,au1=1,au2=3a_{u_0}=2,a_{u_1}=1,a_{u_2}=3,不满足条件。

[1,1,1,1,1][1,1,1,1,1] 是完美的,不等对数量为 00

[2,2,2,3,0][2,2,2,3,0] 是完美的,不等对数量为 77

可以证明完美数列中,不等对数量最大值为 77。故返回 77

数据范围

  • 2n1062\le n\le 10^6
  • 1m2×1061\le m\le 2\times 10^6
  • U[i]V[i]U[i]\neq V[i]
  • 0U[i],V[i]<n0\le U[i],V[i]\lt n

子任务

子任务编号 nn\le mm\le 特殊性质 得分
11 500500 AB\text{AB} 11
22 5×1035\times 10^3 44
33 10610^6 55
44 500500 B\text{B} 33
55 5×1035\times 10^3 55
66 10610^6 2828
77 500500 10310^3 / 66
88 5×1035\times 10^3 10410^4 1010
99 10610^6 2×1062\times 10^6 3838
  • 特殊性质 A\text{A}:每个点的度数都不大于 44
  • 特殊性质 B\text{B}m=n1m=n-1