QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#901158#10096. Generating Random TreesRed Phobia (Koki Takano, Yuma Hamaguchi, Saku Mizuhara)#AC ✓24ms3832kbC++2310.0kb2025-02-15 19:33:272025-02-15 19:33:28

Judging History

This is the latest submission verdict.

  • [2025-02-15 19:33:28]
  • Judged
  • Verdict: AC
  • Time: 24ms
  • Memory: 3832kb
  • [2025-02-15 19:33:27]
  • Submitted

answer

#line 1 "library/Template/template.hpp"
#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define rrep(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--)
#define ALL(v) (v).begin(), (v).end()
#define UNIQUE(v) sort(ALL(v)), (v).erase(unique(ALL(v)), (v).end())
#define SZ(v) (int)v.size()
#define MIN(v) *min_element(ALL(v))
#define MAX(v) *max_element(ALL(v))
#define LB(v, x) int(lower_bound(ALL(v), (x)) - (v).begin())
#define UB(v, x) int(upper_bound(ALL(v), (x)) - (v).begin())

using uint = unsigned int;
using ll = long long int;
using ull = unsigned long long;
using i128 = __int128_t;
using u128 = __uint128_t;
const int inf = 0x3fffffff;
const ll INF = 0x1fffffffffffffff;

template <typename T, typename S = T> S SUM(const vector<T> &a) {
    return accumulate(ALL(a), S(0));
}
template <typename T> inline bool chmax(T &a, T b) {
    if (a < b) {
        a = b;
        return 1;
    }
    return 0;
}
template <typename T> inline bool chmin(T &a, T b) {
    if (a > b) {
        a = b;
        return 1;
    }
    return 0;
}
template <typename T, typename U> T ceil(T x, U y) {
    assert(y != 0);
    if (y < 0)
        x = -x, y = -y;
    return (x > 0 ? (x + y - 1) / y : x / y);
}
template <typename T, typename U> T floor(T x, U y) {
    assert(y != 0);
    if (y < 0)
        x = -x, y = -y;
    return (x > 0 ? x / y : (x - y + 1) / y);
}
template <typename T> int popcnt(T x) {
    return __builtin_popcountll(x);
}
template <typename T> int topbit(T x) {
    return (x == 0 ? -1 : 63 - __builtin_clzll(x));
}
template <typename T> int lowbit(T x) {
    return (x == 0 ? -1 : __builtin_ctzll(x));
}

template <class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
    os << "P(" << p.first << ", " << p.second << ")";
    return os;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {
    os << "{";
    for (int i = 0; i < vec.size(); i++) {
        os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
    }
    os << "}";
    return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const map<T, U> &map_var) {
    os << "{";
    for (auto itr = map_var.begin(); itr != map_var.end(); itr++) {
        os << "(" << itr->first << ", " << itr->second << ")";
        itr++;
        if (itr != map_var.end())
            os << ", ";
        itr--;
    }
    os << "}";
    return os;
}
template <typename T> ostream &operator<<(ostream &os, const set<T> &set_var) {
    os << "{";
    for (auto itr = set_var.begin(); itr != set_var.end(); itr++) {
        os << *itr;
        ++itr;
        if (itr != set_var.end())
            os << ", ";
        itr--;
    }
    os << "}";
    return os;
}
#ifdef LOCAL
#define show(...) _show(0, #__VA_ARGS__, __VA_ARGS__)
#else
#define show(...) true
#endif
template <typename T> void _show(int i, T name) {
    cerr << '\n';
}
template <typename T1, typename T2, typename... T3>
void _show(int i, const T1 &a, const T2 &b, const T3 &...c) {
    for (; a[i] != ',' && a[i] != '\0'; i++)
        cerr << a[i];
    cerr << ":" << b << " ";
    _show(i + 1, a, c...);
}
#line 2 "library/Utility/fastio.hpp"
#include <unistd.h>
namespace fastio {
static constexpr uint32_t SZ = 1 << 17;
char ibuf[SZ];
char obuf[SZ];
char out[100];
// pointer of ibuf, obuf

uint32_t pil = 0, pir = 0, por = 0;

struct Pre {
    char num[10000][4];
    constexpr Pre() : num() {
        for (int i = 0; i < 10000; i++) {
            int n = i;
            for (int j = 3; j >= 0; j--) {
                num[i][j] = n % 10 | '0';
                n /= 10;
            }
        }
    }
} constexpr pre;

inline void load() {
    memmove(ibuf, ibuf + pil, pir - pil);
    pir = pir - pil + fread(ibuf + pir - pil, 1, SZ - pir + pil, stdin);
    pil = 0;
    if (pir < SZ)
        ibuf[pir++] = '\n';
}

inline void flush() {
    fwrite(obuf, 1, por, stdout);
    por = 0;
}

void rd(char &c) {
    do {
        if (pil + 1 > pir)
            load();
        c = ibuf[pil++];
    } while (isspace(c));
}

void rd(string &x) {
    x.clear();
    char c;
    do {
        if (pil + 1 > pir)
            load();
        c = ibuf[pil++];
    } while (isspace(c));
    do {
        x += c;
        if (pil == pir)
            load();
        c = ibuf[pil++];
    } while (!isspace(c));
}

template <typename T> void rd_real(T &x) {
    string s;
    rd(s);
    x = stod(s);
}

template <typename T> void rd_integer(T &x) {
    if (pil + 100 > pir)
        load();
    char c;
    do
        c = ibuf[pil++];
    while (c < '-');
    bool minus = 0;
    if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
        if (c == '-') {
            minus = 1, c = ibuf[pil++];
        }
    }
    x = 0;
    while ('0' <= c) {
        x = x * 10 + (c & 15), c = ibuf[pil++];
    }
    if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
        if (minus)
            x = -x;
    }
}

void rd(int &x) {
    rd_integer(x);
}
void rd(ll &x) {
    rd_integer(x);
}
void rd(i128 &x) {
    rd_integer(x);
}
void rd(uint &x) {
    rd_integer(x);
}
void rd(ull &x) {
    rd_integer(x);
}
void rd(u128 &x) {
    rd_integer(x);
}
void rd(double &x) {
    rd_real(x);
}
void rd(long double &x) {
    rd_real(x);
}

template <class T, class U> void rd(pair<T, U> &p) {
    return rd(p.first), rd(p.second);
}
template <size_t N = 0, typename T> void rd_tuple(T &t) {
    if constexpr (N < std::tuple_size<T>::value) {
        auto &x = std::get<N>(t);
        rd(x);
        rd_tuple<N + 1>(t);
    }
}
template <class... T> void rd(tuple<T...> &tpl) {
    rd_tuple(tpl);
}

template <size_t N = 0, typename T> void rd(array<T, N> &x) {
    for (auto &d : x)
        rd(d);
}
template <class T> void rd(vector<T> &x) {
    for (auto &d : x)
        rd(d);
}

void read() {}
template <class H, class... T> void read(H &h, T &...t) {
    rd(h), read(t...);
}

void wt(const char c) {
    if (por == SZ)
        flush();
    obuf[por++] = c;
}
void wt(const string s) {
    for (char c : s)
        wt(c);
}
void wt(const char *s) {
    size_t len = strlen(s);
    for (size_t i = 0; i < len; i++)
        wt(s[i]);
}

template <typename T> void wt_integer(T x) {
    if (por > SZ - 100)
        flush();
    if (x < 0) {
        obuf[por++] = '-', x = -x;
    }
    int outi;
    for (outi = 96; x >= 10000; outi -= 4) {
        memcpy(out + outi, pre.num[x % 10000], 4);
        x /= 10000;
    }
    if (x >= 1000) {
        memcpy(obuf + por, pre.num[x], 4);
        por += 4;
    } else if (x >= 100) {
        memcpy(obuf + por, pre.num[x] + 1, 3);
        por += 3;
    } else if (x >= 10) {
        int q = (x * 103) >> 10;
        obuf[por] = q | '0';
        obuf[por + 1] = (x - q * 10) | '0';
        por += 2;
    } else
        obuf[por++] = x | '0';
    memcpy(obuf + por, out + outi + 4, 96 - outi);
    por += 96 - outi;
}

template <typename T> void wt_real(T x) {
    ostringstream oss;
    oss << fixed << setprecision(15) << double(x);
    string s = oss.str();
    wt(s);
}

void wt(int x) {
    wt_integer(x);
}
void wt(ll x) {
    wt_integer(x);
}
void wt(i128 x) {
    wt_integer(x);
}
void wt(uint x) {
    wt_integer(x);
}
void wt(ull x) {
    wt_integer(x);
}
void wt(u128 x) {
    wt_integer(x);
}
void wt(double x) {
    wt_real(x);
}
void wt(long double x) {
    wt_real(x);
}

template <class T, class U> void wt(const pair<T, U> val) {
    wt(val.first);
    wt(' ');
    wt(val.second);
}
template <size_t N = 0, typename T> void wt_tuple(const T t) {
    if constexpr (N < std::tuple_size<T>::value) {
        if constexpr (N > 0) {
            wt(' ');
        }
        const auto x = std::get<N>(t);
        wt(x);
        wt_tuple<N + 1>(t);
    }
}
template <class... T> void wt(tuple<T...> tpl) {
    wt_tuple(tpl);
}
template <class T, size_t S> void wt(const array<T, S> val) {
    auto n = val.size();
    for (size_t i = 0; i < n; i++) {
        if (i)
            wt(' ');
        wt(val[i]);
    }
}
template <class T> void wt(const vector<T> val) {
    auto n = val.size();
    for (size_t i = 0; i < n; i++) {
        if (i)
            wt(' ');
        wt(val[i]);
    }
}

void print() {
    wt('\n');
}
template <class Head, class... Tail> void print(Head &&head, Tail &&...tail) {
    wt(head);
    if (sizeof...(Tail))
        wt(' ');
    print(forward<Tail>(tail)...);
}
void __attribute__((destructor)) _d() {
    flush();
}
} // namespace fastio

using fastio::flush;
using fastio::print;
using fastio::read;

inline void first(bool i = true) {
    print(i ? "first" : "second");
}
inline void Alice(bool i = true) {
    print(i ? "Alice" : "Bob");
}
inline void Takahashi(bool i = true) {
    print(i ? "Takahashi" : "Aoki");
}
inline void yes(bool i = true) {
    print(i ? "yes" : "no");
}
inline void Yes(bool i = true) {
    print(i ? "Yes" : "No");
}
inline void No() {
    print("No");
}
inline void YES(bool i = true) {
    print(i ? "YES" : "NO");
}
inline void NO() {
    print("NO");
}
inline void Yay(bool i = true) {
    print(i ? "Yay!" : ":(");
}
inline void Possible(bool i = true) {
    print(i ? "Possible" : "Impossible");
}
inline void POSSIBLE(bool i = true) {
    print(i ? "POSSIBLE" : "IMPOSSIBLE");
}

/**
 * @brief Fast IO
 */
#line 3 "sol.cpp"

int main() {
    int n, k;
    read(n, k);

    using P = pair<int, int>;
    vector<P> cs;
    rep(id, 0, k * 2) {
        vector<int> deg(n);
        rep(_, 0, n - 1) {
            int u, v;
            read(u, v);
            u--, v--;
            deg[u]++;
            deg[v]++;
        }
        int cnt = 0;
        rep(i, 0, n) if (deg[i] == 1) cnt++;
        cs.push_back({cnt, id});
    }
    sort(ALL(cs));
    vector<string> ret(n, "DSU");
    rep(i, 0, k) ret[cs[i].second] = "Uniform";
    rep(i, 0, k * 2) print(ret[i]);
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3584kb

input:

4 2
3 2
1 4
1 3
2 1
3 2
4 1
4 1
3 2
2 4
1 4
3 1
2 1

output:

Uniform
Uniform
DSU
DSU

result:

ok participant made 2 mistakes out of allowed 20

Test #2:

score: 0
Accepted
time: 22ms
memory: 3832kb

input:

10000 50
521 2013
4662 8507
3864 3117
382 7022
1141 1073
1493 1668
6936 8886
1739 9754
6783 9485
3305 9004
6390 1738
7386 988
8265 5088
8193 4713
3011 3132
3852 4363
3792 3497
6701 2716
4986 1884
508 3555
7147 6316
2598 3029
8799 354
963 306
802 6858
4516 6557
816 7308
535 2308
8609 1396
617 518
283...

output:

DSU
DSU
DSU
Uniform
Uniform
DSU
Uniform
Uniform
DSU
DSU
Uniform
Uniform
Uniform
DSU
Uniform
Uniform
DSU
Uniform
DSU
DSU
Uniform
DSU
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
DSU
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
Uniform
DSU
Uniform
Uniform
Uniform
DSU
DSU
DSU
Uniform
Unif...

result:

ok participant made 0 mistakes out of allowed 20

Test #3:

score: 0
Accepted
time: 23ms
memory: 3788kb

input:

10000 50
4251 4098
5520 989
1453 8492
2057 9954
71 3614
7280 1157
991 6527
7166 7539
563 7243
7036 8324
9969 1577
8781 2031
7363 6144
397 1445
6686 7932
1046 8267
8811 7491
7430 4730
5566 4211
5249 5077
2776 3450
985 9184
6508 1655
8658 4185
8981 1738
9989 9082
308 4580
6783 663
274 3214
5731 557
69...

output:

Uniform
Uniform
Uniform
DSU
Uniform
Uniform
DSU
Uniform
Uniform
DSU
Uniform
DSU
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
Uniform
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
Uniform
DSU
Uniform
DSU
Uniform
DSU
Uniform
DSU
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
DSU
Uniform
DSU
...

result:

ok participant made 0 mistakes out of allowed 20

Test #4:

score: 0
Accepted
time: 24ms
memory: 3712kb

input:

10000 50
6959 2683
6622 5891
5151 8433
8114 831
8437 9318
4134 5319
7926 1225
3575 1176
5145 5021
7202 7334
8871 6529
3776 9169
6251 7327
7701 4862
5919 3606
3276 5862
9153 5062
349 144
5586 9948
3959 4708
694 5417
2481 2273
4743 5736
2334 1951
6710 8536
1588 7169
9803 7779
2598 9051
1763 6185
6981 ...

output:

DSU
Uniform
DSU
DSU
DSU
DSU
Uniform
DSU
DSU
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
Uniform
DSU
DSU
DSU
Uniform
Uniform
DSU
Uniform
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
Uniform
DSU
DSU
DSU
Uniform
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
DSU
DSU
DSU
Uniform
DSU
DSU
Uniform
Unif...

result:

ok participant made 0 mistakes out of allowed 20

Test #5:

score: 0
Accepted
time: 24ms
memory: 3828kb

input:

10000 50
8881 9191
203 4418
7574 6636
210 7041
1492 8011
5995 6535
3093 1578
6942 4972
2308 8222
4512 9261
8592 9802
7838 1367
26 6916
6485 6044
3211 8362
9418 3462
5512 4358
8831 4572
9842 3333
4146 5963
1600 3935
8067 4027
1333 4966
8848 8435
2770 7032
2610 831
9882 7876
6371 648
9064 2473
5818 70...

output:

DSU
Uniform
Uniform
DSU
Uniform
DSU
DSU
DSU
Uniform
DSU
DSU
DSU
DSU
Uniform
DSU
DSU
Uniform
DSU
Uniform
Uniform
DSU
DSU
Uniform
Uniform
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
DSU
Uniform
DSU
DSU
DSU
DSU
DSU
Uniform
Uniform
DSU
DSU
DSU
DSU
Uniform
DSU
DSU
Uniform
Uniform
DSU
DSU
Uniform
...

result:

ok participant made 0 mistakes out of allowed 20

Test #6:

score: 0
Accepted
time: 22ms
memory: 3612kb

input:

10000 50
6602 7794
9813 6808
8567 5704
6649 4641
6456 1453
5197 4343
228 2953
2662 8579
5551 3386
9709 2667
9153 517
4793 5220
2609 9847
9384 2456
1336 1279
4619 1743
2831 3359
7158 8282
1547 981
9756 1792
4580 1348
5853 6360
3112 5599
7364 4224
9372 3236
3282 3821
5748 1939
3053 5570
9492 6541
4873...

output:

DSU
Uniform
DSU
Uniform
DSU
DSU
Uniform
Uniform
Uniform
Uniform
Uniform
Uniform
DSU
Uniform
DSU
DSU
DSU
DSU
Uniform
DSU
Uniform
DSU
Uniform
DSU
DSU
Uniform
Uniform
Uniform
DSU
Uniform
Uniform
DSU
DSU
DSU
DSU
Uniform
Uniform
Uniform
Uniform
DSU
DSU
Uniform
Uniform
DSU
Uniform
Uniform
Uniform
DSU
DSU
...

result:

ok participant made 0 mistakes out of allowed 20

Extra Test:

score: 0
Extra Test Passed