#P16533. [THUPC 2026 决赛] 社交网络
[THUPC 2026 决赛] 社交网络
题目背景
来自 2026 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2026)决赛。
题解等资源可在 https://github.com/dapingguo8/THUPC2026-final 查看。
讨论完令人头疼的科研与审稿,茶话会的话题逐渐转向了日常的社交。小 T 兴致勃勃地分享了他的一个有趣发现:在某一常用的社交平台上,用户彼此间的关注关系恰好都是严格的单向关注,即不存在两名用户互相关注的情况。
这个奇妙的现象立刻引起了大家的讨论。小 S 顺势提取了该网络的部分统计数据,收集到了每位用户的关注数与粉丝数。遗憾的是,她在传阅数据的过程中不小心弄丢了一部分,最后只留下了一个由若干正整数构成的集合。小 S 发现,对于集合中的每一个元素,总能找到至少一个用户,其关注数或粉丝数恰好等于该元素。
由于平台完整的关注结构对外保密,具体的社交关系网已无从知晓。为了验证这些残存数据的合理性,大家纷纷拿起了纸笔,尝试着还原出符合条件的网络。为了增添几分趣味与竞技性,大家甚至就此展开了一场小小的比赛,看谁能构造出总关注数最少的社交网络。
题目描述
在这一社交平台上,共有 位用户。小 S 收集到了一个大小为 的数字集合 。根据这些信息,一个可能的关注网络可以抽象为一张满足以下条件的有向图 :
- 包含 位用户,即顶点集合 ;
- 不存在自己关注自己或重复关注的情况,即图 不含自环与重边;
- 所有关注关系均为严格的单向关注,即对于任意有向边 ,均满足 ;
- 对于集合中的每一个元素 ,图 中都至少存在一个顶点,其出度(对应关注数)或入度(对应粉丝数)恰好等于 。
你需要根据小 S 收集到的信息,还原出一个总关注数最少(即图 边数最小)的关注网络。
输入格式
输入的第一行包含一个非负整数 ,表示输出的参数。
输入的第二行包含两个正整数 ,表示用户数量与小 S 收集到的集合的大小。保证若 ,则 。
输入的第三行包含 个两两不同的正整数 ,表示小 S 收集到的集合中的元素。
输出格式
输出一行一个正整数 ,表示所有可能的关注网络中总关注数的最小值。
若 ,则接下来输出 行,每行包含两个正整数 ,表示用户 关注了用户 ,即 。
0
5 4
3 1 4 2
7
3 2
4 1
3 4
4 5
3 5
4 2
3 1
提示
对于样例,图 一共有 条边,其中顶点 的出度是 ,顶点 的入度是 ,顶点 的出度是 ,顶点 的入度是 。可以证明 是图 的最少边数。