QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#901158 | #10096. Generating Random Trees | Red Phobia (Koki Takano, Yuma Hamaguchi, Saku Mizuhara)# | AC ✓ | 24ms | 3832kb | C++23 | 10.0kb | 2025-02-15 19:33:27 | 2025-02-15 19:33:28 |
Judging History
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