CF2068A.Condorcet Elections

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

正值市政选举年。尽管该国领导人已二十年未变,但选举始终透明且公正。

共有 nn 名政治候选人(编号 11 至 nn)参与竞选。选举采用改进的排序投票制:每位选民需对所有 nn 名候选人进行从最优到最差的排序。即每张选票是 {1,2,…,n}\{1, 2, \ldots, n\} 的一个排列,其中排列的第一个元素代表最优先的候选人。

当且仅当候选人 aa 在超过半数的选票中排在候选人 bb 之前时,我们称候选人 aa 击败候选人 bb。

由于选举公平透明,国家电视台已提前宣布了 mm 个事实——第 ii 个事实为"候选人 aia_i 击败候选人 bib_i",且这些声明均发生在实际选举之前!

作为选举委员会负责人,你需要统计选票并给出符合电视台宣传结果的选票列表,或判定其不可能实现。但请注意,你最好能找到解决方案,否则可能得罪上级。

输入格式

第一行包含整数 nn 和 mm(2≤n≤502 \le n \le 50,1≤m≤n(n−1)21 \le m \le \frac{n(n-1)}{2})——政党数量及已知选举结果的候选人对数。

接下来 mm 行中,第 ii 行包含两个整数 aia_i 和 bib_i(1≤ai,bi≤n1 \le a_i, b_i \le n,ai≠bia_i \ne b_i)——表示候选人 aia_i 击败候选人 bib_i。

每个无序对 {ai,bi}\{a_i, b_i\} 最多出现一次。

输出格式

若存在符合电视台宣传事实的选票列表,输出 YES\texttt{YES},否则输出 NO\texttt{NO}。

若存在有效选票列表,按以下格式输出:

首先输出投票总数 kk(1≤k≤50 0001 \le k \le 50\,000)。可以证明若存在有效选票列表,必存在不超过 50 00050\,000 张选票的方案。

随后输出 kk 行,每行包含 {1,2,…,n}\{1, 2, \ldots, n\} 的一个排列,描述该选票的排序。排列的第一个数字代表最优先候选人。

需满足:对于所有 1≤i≤m1\le i\le m,aia_i 在超过 k/2k/2 张选票中排在 bib_i 之前。对于未出现在要求列表中的候选人对 {a,b}\{a, b\},其结果可以是任意的(包括双方均未击败对方)。

输入输出样例

  • 输入#1

    2 1
    1 2

    输出#1

    YES
    1
    1 2
  • 输入#2

    3 3
    1 2
    2 3
    3 1

    输出#2

    YES
    3
    1 2 3
    2 3 1
    3 1 2

说明/提示

在第二个样例中,候选人 11 击败候选人 22 是因为在三张选票中有两张 11 排在 22 前(超过总票数的一半)。同理,候选人 22 击败候选人 33,候选人 33 击败候选人 11。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页