#P16533. [THUPC 2026 决赛] 社交网络

[THUPC 2026 决赛] 社交网络

题目背景

来自 2026 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2026)决赛。

题解等资源可在 https://github.com/dapingguo8/THUPC2026-final 查看。

讨论完令人头疼的科研与审稿,茶话会的话题逐渐转向了日常的社交。小 T 兴致勃勃地分享了他的一个有趣发现:在某一常用的社交平台上,用户彼此间的关注关系恰好都是严格的单向关注,即不存在两名用户互相关注的情况。

这个奇妙的现象立刻引起了大家的讨论。小 S 顺势提取了该网络的部分统计数据,收集到了每位用户的关注数与粉丝数。遗憾的是,她在传阅数据的过程中不小心弄丢了一部分,最后只留下了一个由若干正整数构成的集合。小 S 发现,对于集合中的每一个元素,总能找到至少一个用户,其关注数或粉丝数恰好等于该元素。

由于平台完整的关注结构对外保密,具体的社交关系网已无从知晓。为了验证这些残存数据的合理性,大家纷纷拿起了纸笔,尝试着还原出符合条件的网络。为了增添几分趣味与竞技性,大家甚至就此展开了一场小小的比赛,看谁能构造出总关注数最少的社交网络。

题目描述

在这一社交平台上,共有 nn 位用户。小 S 收集到了一个大小为 mm 的数字集合 {c1,,cm}\{c_1, \dots, c_m\}。根据这些信息,一个可能的关注网络可以抽象为一张满足以下条件的有向图 G=(V,E)G = (V, E)

  • 包含 nn 位用户,即顶点集合 V={1,2,,n}V = \{1, 2, \dots, n\}
  • 不存在自己关注自己或重复关注的情况,即图 GG 不含自环与重边;
  • 所有关注关系均为严格的单向关注,即对于任意有向边 (u,v)E(u, v) \in E,均满足 (v,u)E(v, u) \notin E
  • 对于集合中的每一个元素 ci (1im)c_i \ (1 \le i \le m),图 GG 中都至少存在一个顶点,其出度(对应关注数)或入度(对应粉丝数)恰好等于 cic_i

你需要根据小 S 收集到的信息,还原出一个总关注数最少(即图 GG 边数最小)的关注网络。

输入格式

输入的第一行包含一个非负整数 o{0,1}o \in \{0, 1\},表示输出的参数。

输入的第二行包含两个正整数 n,m (1m<n106)n, m \ (1 \le m < n \le 10 ^ 6),表示用户数量与小 S 收集到的集合的大小。保证若 o=0o = 0,则 n2×103n \le 2 \times 10 ^ 3

输入的第三行包含 mm 个两两不同的正整数 c1,c2,,cm (1cin1)c_1, c_2, \dots, c_m \ (1 \le c_i \le n - 1),表示小 S 收集到的集合中的元素。

输出格式

输出一行一个正整数 kk,表示所有可能的关注网络中总关注数的最小值。

o=0o = 0,则接下来输出 kk 行,每行包含两个正整数 u,v (1u,vn)u, v \ (1 \le u, v \le n),表示用户 uu 关注了用户 vv,即 (u,v)E(u, v) \in E

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

提示

对于样例,图 GG 一共有 77 条边,其中顶点 44 的出度是 33,顶点 22 的入度是 11,顶点 33 的出度是 44,顶点 11 的入度是 22。可以证明 77 是图 GG 的最少边数。