tijiess

第一个对!

翻译有误,

正确的翻译:

[捞](https://www.luogu.com.cn/discuss/653118)。


解题思路:

需要判断一下度数总和的奇偶性。

如果总和是奇数,那就说明没有办法满足条件,输出 ```
ABSOLUTELY NO```。

反之,可能是满足条件的图。

接下来我们需要看一下是否有顶点的度数超过了所有顶点度数的一半。

如果有这样的顶点,那就无论如何都无法通过增加其他顶点的度数来满足条件,则输出  ```NO```。

我们再来看一下是否有 $1$ 个顶点的度数 $\le$ 度数总和的一半。

如果有这样的顶点,那就无法通过增加顶点的度数来满足条件,则输出 ``` NO```
。反之,输出 ```YES```。

具体内容看一下代码吧。

代码:

```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    int d[n];
    int sum = 0;
    for (int i = 0; i < n; ++i) {
        cin >> d[i];
        sum += d[i];
        sum %= 2;//计算总度数的奇偶性
    }
    sort(d, d + n, greater<int>());
    if (sum % 2 == 1) {
        d[0] --;
        sort(d, d + n, greater<int>());    /*如果总度数是奇数,那么说明图中有奇数个边。为了使图成为简单图,需要将其中的一条边删除。因此,将度数最大的顶点的度数减去1,以达到删除一条边的效果。
然后,倒序排序,目的是确保度数最大的顶点仍然处于数组的第一个位置,以便后续的计算/*/
    }
    int z = 0;
    for (int i = 0; i < n; ++i) {
        if (d[i] != 0) {
            z = i + 1; //得到有度数的顶点的数量。
        }
    }
    long long s[z+1];
    int cop[z];
    s[0] = 0;
    for (int i = 0; i < z; ++i) {
        s[i + 1] = s[i] + d[i];
        cop[z - 1 - i] = d[i];//为准备后续的计算步骤。
    }
    bool possible = true;
    for (int i = 1; i <= z; ++i) {
        long long c = (long long)i * (i - 1) - s[i];
        int id = upper_bound(cop, cop + z, i) - cop;
        id = z - id;
        id = max(id, i);
        c += (long long)(id - i) * i + s[z] - s[id];
        if (c < 0) {
            possible = false;
            break;
        }
    }
    if (possible) {
        if (sum % 2 == 1) {
            cout << "NO" << endl;
        } else {
            cout << "YES" << endl;
        }
    } else {
        cout << "ABSOLUTELY NO" << endl;
    }
    return 0;
}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值