CF2068A Condorcet Elections
题目描述
正值市政选举年。尽管该国领导人已二十年未变,但选举始终透明且公正。
共有 $n$ 名政治候选人(编号 $1$ 至 $n$)参与竞选。选举采用改进的排序投票制:每位选民需对所有 $n$ 名候选人进行从最优到最差的排序。即每张选票是 $\{1, 2, \ldots, n\}$ 的一个排列,其中排列的第一个元素代表最优先的候选人。
当且仅当候选人 $a$ 在超过半数的选票中排在候选人 $b$ 之前时,我们称候选人 $a$ 击败候选人 $b$。
由于选举公平透明,国家电视台已提前宣布了 $m$ 个事实——第 $i$ 个事实为"候选人 $a_i$ 击败候选人 $b_i$",且这些声明均发生在实际选举之前!
作为选举委员会负责人,你需要统计选票并给出符合电视台宣传结果的选票列表,或判定其不可能实现。但请注意,你最好能找到解决方案,否则可能得罪上级。
输入格式
第一行包含整数 $n$ 和 $m$($2 \le n \le 50$,$1 \le m \le \frac{n(n-1)}{2}$)——政党数量及已知选举结果的候选人对数。
接下来 $m$ 行中,第 $i$ 行包含两个整数 $a_i$ 和 $b_i$($1 \le a_i, b_i \le n$,$a_i \ne b_i$)——表示候选人 $a_i$ 击败候选人 $b_i$。
每个无序对 $\{a_i, b_i\}$ 最多出现一次。
输出格式
若存在符合电视台宣传事实的选票列表,输出 $\texttt{YES}$,否则输出 $\texttt{NO}$。
若存在有效选票列表,按以下格式输出:
首先输出投票总数 $k$($1 \le k \le 50\,000$)。可以证明若存在有效选票列表,必存在不超过 $50\,000$ 张选票的方案。
随后输出 $k$ 行,每行包含 $\{1, 2, \ldots, n\}$ 的一个排列,描述该选票的排序。排列的第一个数字代表最优先候选人。
需满足:对于所有 $1\le i\le m$,$a_i$ 在超过 $k/2$ 张选票中排在 $b_i$ 之前。对于未出现在要求列表中的候选人对 $\{a, b\}$,其结果可以是任意的(包括双方均未击败对方)。
说明/提示
在第二个样例中,候选人 $1$ 击败候选人 $2$ 是因为在三张选票中有两张 $1$ 排在 $2$ 前(超过总票数的一半)。同理,候选人 $2$ 击败候选人 $3$,候选人 $3$ 击败候选人 $1$。
翻译由 DeepSeek R1 完成