Educational Codeforces Round #52 B. Vasya and Isolated Vertices

http://codeforces.com/contest/1065/problem/B

问题

给定问 \(N\)\(M\),问 \(N\) 个点 \(M\) 条边且没有重边和自环的无向图最多、最少有多少个孤立点 。

题解

最少的话,可以两个两个连,最大化对边的利用。

最多的话,可以一堆点尽量往完全图连,剩下的都是孤立点。

#include <bits/stdc++.h>

#ifdef LOCAL
    #define debug(...) fprintf(stderr, __VA_ARGS__)
#else
    #define debug(...) 0
#endif

using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> pii;

int rint() {
    int n, c, sgn = 0;
    while ((c = getchar()) < '-');
    if (c == '-') n = 0, sgn = 1;
    else n = c - '0';
    while ((c = getchar()) >= '0') {
        n = 10 * n + c - '0';
    }
    return sgn ? -n : n;
}

int main() {
    ll n, m; // f**k myself
    scanf("%lld %lld", &n, &m);

    if (m == 0) {
        printf("%lld %lld\n", n, n);
        return 0;
    }
    if (n == 1) {
        puts("1 1");
        return 0;
    }

    ll mi = (2 * m >= n ? 0 : n - 2 * m);
    ll ma = 2;
    while (ma < n && ma * (ma - 1) < 2 * m) ma++;
    assert(ma >= 2);
    ma = n - ma;

    printf("%lld %lld\n", mi, ma);
    return 0;
}

总结

没开 long long 就错了两次。。。也不知道该说啥了,以后不要这么迷吧。

猜你喜欢

转载自www.cnblogs.com/hfccccccccccccc/p/9777445.html