SP21135 BFCC - Distinct Viewpoints
题目描述
Palinopolis 的市民特别热衷于争论。每当两位市民碰头,无论是为了协商领土边界还是购买宠物,他们的传统要求双方必须持对立立场争论至少五分钟,最后在不满中分开。擅长争论的人常常在著名的辩论公司中工作,而要成功入职,他们必须先通过严格的考试和激烈的招聘过程。在招聘的第一轮,每个申请者需要与公司的负责人进行长达十小时的辩论,期间不可达成任何共识。第二轮则是申请者们相互辩论。申请者被方便地编号为从 1 到 **N**,并选定一个使得 **N** 种观点 **V** $ _{1} $, **V** $ _{2} $, ..., **V** $ _{N} $ 彼此对立的主题,分别分配给他们。接着,以对的形式选择申请者,并将他们关在一个小而闷热的房间内,让他们就各自的立场辩论,直至一方妥协、放弃或晕倒。失败者不会被直接淘汰,但在后续比赛中必须采用胜利者的观点。此外,任何原持失败者观点的人也需转为胜方的观点。有时会选择双方持有相同观点的选手互辩。对于 Palinopolis 的市民来说,这不是问题,因为他们能与持相同观点的人进行激烈辩论。然而,没有人会被要求与自己争论,因为那确实太荒唐了。
最终的选拔依据多种复杂因素,包括比赛胜率、晕倒的小时数,以及评委当天的心情。作为监督委员会的一员,你的任务之一是分析比赛并汇总数据供上级参考。一个关键的信息(根据老板的说法)是整个过程中存活下来的不同观点数量,以及哪些申请者共享相同的观点。虽然这任务通常不难,但今天你的老板心情不佳,决定让你使用一种他在网上读到的奇怪的原始编程语言解决这个问题,以示惩罚。
**注意:** 你可以使用任何编程语言,只要是 brainf\*\*k。
输入格式
首先输入一个整数 **T** (1 ≤ T ≤ 100),表示测试用例的数量。每个测试用例以两个整数 **N** (1 ≤ N ≤ 100) 和 **M** (0 ≤ M ≤ 1000) 开头,分别表示申请者数量和比赛场次。接下来的 **M** 行中,每行有一对整数 **u** 和 **v**(范围在 \[1, **N**\] 内),表示申请者 **u** 和 **v** 在一场比赛中相遇。最后,每个测试用例(包括最后一个)以一个空行结束。
输出格式
对于每个测试用例,首先输出 **K**,即最终存活的不同观点数量。接着,输出每个共享同一观点的申请者组。每组申请者内部应按升序排列,组与组之间也需按字典序排列。
**本翻译由 AI 自动生成**