QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#109235 | #6396. Puzzle: Kusabi | wsyear | WA | 72ms | 25672kb | C++17 | 3.4kb | 2023-05-27 23:16:56 | 2023-05-27 23:16:57 |
Judging History
answer
#include <bits/stdc++.h>
#ifdef dbg
#define D(...) fprintf(stderr, __VA_ARGS__)
#define DD(...) D(#__VA_ARGS__ " = "), debug_helper::debug(__VA_ARGS__), D("\n")
#include "C:\Users\wsyear\Desktop\OI\templates\debug.hpp"
#else
#define D(...) ((void)0)
#define DD(...) ((void)0)
#endif
#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
#define gc getchar
#define pc putchar
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
using namespace std;
template <class T = int> T read() {
T x = 0; bool f = 0; char ch = gc();
while (!isdigit(ch)) f = ch == '-', ch = gc();
while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = gc();
return f ? -x: x;
}
template <class T> void write(T x) {
if (x >= 0) { if (x > 9) write(x / 10); pc(x % 10 + 48); }
else { pc('-'); if (x < -9) write(-x / 10); pc(48 - x % 10); }
}
const int N = 100010;
int n, fa[N], a[N], dep[N];
string s[N];
vector<int> e[N];
vector<pii> ans;
set<pii> vd[N], vc[N];
vector<pii> vt[N], vec;
set<pii>::iterator it;
void dfs(int u) {
dep[u] = dep[fa[u]] + 1;
for (int v : e[u]) {
dfs(v);
for (auto x : vd[v]) vd[u].insert(x);
for (auto x : vt[v]) vt[u].emplace_back(x);
for (auto x : vc[v]) vc[u].insert(x);
vd[v].clear(), vt[v].clear(), vc[v].clear();
}
if (a[u] == 0) vd[u].insert(pii(dep[u], u));
else if (a[u] == 1) vt[u].emplace_back(pii(dep[u], u));
else if (a[u] == 2) vc[u].insert(pii(dep[u], u));
// DD(u, vt[u], vd[u], vc[u]), cerr.flush();
map<int, int> mp;
for (it = vd[u].end(); it != vd[u].begin();) {
it = prev(it);
int v = it -> se, d = it -> fi;
if (vc[u].empty() || (*prev(vc[u].end())).fi <= d);
else {
int w = (*vc[u].upper_bound(pii(d, n + 1))).se;
ans.emplace_back(pii(v, w));
mp[v] = 1, vc[u].erase(pii(dep[w], w));
}
}
for (auto [v, w] : mp) vd[u].erase(pii(dep[v], v));
// DD(u, vt[u], vd[u], vc[u]), cerr.flush();
mp.clear();
for (it = vc[u].begin(); it != vc[u].end();) {
int v = it -> se, d = it -> fi;
if (vd[u].empty() || (*vd[u].begin()).fi >= d);
else {
int w = (*prev(vd[u].lower_bound(pii(d, 0)))).se;
ans.emplace_back(pii(v, w));
mp[v] = 1, vd[u].erase(pii(dep[w], w));
}
it = next(it);
}
for (auto [v, w] : mp) vc[u].erase(pii(dep[v], v));
// DD(u, vt[u], vd[u], vc[u]), cerr.flush();
sort(ALL(vt[u])), vec.clear();
for (int i = 0; i < SZ(vt[u]);) {
if (i + 1 >= SZ(vt[u]) || vt[u][i].fi != vt[u][i + 1].fi) {
vec.emplace_back(vt[u][i]);
i += 1;
} else {
ans.emplace_back(vt[u][i].se, vt[u][i + 1].se);
i += 2;
}
}
swap(vt[u], vec);
// DD(u, vt[u], vd[u], vc[u]), cerr.flush();
}
int main() {
n = read(), a[1] = -1;
rep (i, 2, n) {
i = read(), fa[i] = read(), cin >> s[i];
if (s[i] == "Tong") a[i] = 1;
else if (s[i] == "Duan") a[i] = 0;
else if (s[i] == "Chang") a[i] = 2;
else if (s[i] == "-") a[i] = -1;
e[fa[i]].emplace_back(i);
}
dfs(1);
int sum = 0;
rep (i, 2, n) sum += (a[i] != -1);
if (SZ(ans) != sum / 2 || (sum & 1)) puts("NO");
else {
puts("YES");
for (auto [u, v] : ans) write(u), pc(32), write(v), pc(10);
}
}
详细
Test #1:
score: 100
Accepted
time: 5ms
memory: 20584kb
input:
8 2 1 - 3 1 - 4 2 Tong 5 2 Tong 6 3 Duan 7 3 - 8 7 Chang
output:
YES 4 5 6 8
result:
ok Correct.
Test #2:
score: 0
Accepted
time: 4ms
memory: 20644kb
input:
10 2 1 Duan 3 2 Duan 4 2 - 5 4 Chang 6 2 Chang 7 1 Duan 8 6 Tong 9 6 Tong 10 3 Chang
output:
YES 3 10 8 9 2 6 7 5
result:
ok Correct.
Test #3:
score: 0
Accepted
time: 3ms
memory: 21112kb
input:
2 2 1 Tong
output:
NO
result:
ok Correct.
Test #4:
score: 0
Accepted
time: 68ms
memory: 24504kb
input:
100000 2 1 Duan 3 1 Duan 4 3 - 5 4 Duan 6 3 - 7 4 Duan 8 4 - 9 8 - 10 7 Duan 11 9 - 12 7 Duan 13 7 Duan 14 8 Duan 15 13 - 16 10 Duan 17 11 Duan 18 12 - 19 1 Duan 20 5 Duan 21 4 Duan 22 14 Duan 23 16 - 24 22 Duan 25 16 Duan 26 13 - 27 13 - 28 17 - 29 5 Duan 30 22 - 31 23 - 32 9 Duan 33 5 - 34 30 Duan...
output:
YES 46666 56115 38802 88119 10006 93143 76473 31531 15988 42604 2008 11412 6569 30148 46703 64525 70618 71289 47748 81204 46131 97634 20514 42353 82155 83516 62410 66867 9975 15712 3205 4978 5622 83026 10902 48783 30893 82167 65878 93809 33377 66951 66936 94549 64411 79128 8453 22475 36857 54702 619...
result:
ok Correct.
Test #5:
score: 0
Accepted
time: 57ms
memory: 23780kb
input:
100000 2 1 - 3 2 - 4 3 - 5 4 - 6 4 - 7 6 - 8 7 - 9 5 - 10 9 - 11 10 - 12 6 - 13 12 - 14 11 - 15 9 - 16 14 - 17 16 - 18 10 - 19 15 - 20 13 - 21 20 - 22 17 - 23 22 - 24 22 Duan 25 11 - 26 12 - 27 20 - 28 18 - 29 28 - 30 16 - 31 28 - 32 30 - 33 31 - 34 28 - 35 34 - 36 35 - 37 22 - 38 34 - 39 38 - 40 35...
output:
YES 5203 28541 8106 5981 7551 7900 47998 53424 86909 91669 72002 40295 32334 65376 57528 95652 66693 91216 88445 98194 44959 54118 74202 76761 64661 71470 30271 85084 41192 60344 10342 41421 12876 79425 25933 35989 39297 41959 46303 94979 10581 46189 14956 51797 41806 82599 26090 60566 48923 94132 6...
result:
ok Correct.
Test #6:
score: 0
Accepted
time: 72ms
memory: 24508kb
input:
100000 2 1 - 3 2 - 4 3 Duan 5 4 Chang 6 5 Duan 7 6 Chang 8 7 Duan 9 8 Chang 10 9 Duan 11 10 Chang 12 11 Duan 13 12 Chang 14 12 Duan 15 14 Chang 16 15 Tong 17 15 Tong 18 17 Duan 19 18 Duan 20 19 Chang 21 18 Duan 22 21 Duan 23 18 Chang 24 21 - 25 24 Duan 26 25 Chang 27 26 Duan 28 27 Chang 29 26 Duan 3...
output:
YES 19 20 55 65 52 53 46 48 35 36 22 34 58 61 56 57 1097 1206 1522 1593 1890 1938 1217 1365 1191 1295 2158 2188 1764 2845 1408 1646 3147 5721 2746 2810 2937 3194 2399 2710 3657 3778 2668 3580 2179 2259 2122 2174 2204 2379 2392 2449 2218 2499 2233 2369 2020 2077 8244 9174 14498 15184 14362 15193 1040...
result:
ok Correct.
Test #7:
score: 0
Accepted
time: 49ms
memory: 24092kb
input:
100000 2 1 - 3 2 - 4 3 - 5 4 - 6 5 - 7 6 - 8 7 - 9 8 - 10 9 Duan 11 10 - 12 11 Chang 13 12 Duan 14 13 Chang 15 14 - 16 15 - 17 16 Duan 18 17 Chang 19 17 - 20 19 - 21 20 - 22 21 - 23 22 - 24 23 - 25 24 - 26 25 Duan 27 26 - 28 27 Duan 29 28 - 30 29 Chang 31 28 - 32 31 Chang 33 32 - 34 32 - 35 34 - 36 ...
output:
YES 81 85 105 107 103 117 168 172 273 275 321 333 369 384 314 327 433 463 429 437 543 588 667 639 1167 1273 1160 1375 1117 1176 995 1021 926 929 832 1059 1196 1242 1328 1329 1254 1259 1194 1213 1150 1275 1521 1689 1424 1620 1226 1229 1134 1277 915 1099 1218 1237 1316 1358 1284 1350 2462 2524 2128 23...
result:
ok Correct.
Test #8:
score: 0
Accepted
time: 49ms
memory: 24272kb
input:
100000 2 1 - 3 2 - 4 3 - 5 4 - 6 5 Duan 7 6 - 8 7 - 9 8 - 10 9 Chang 11 10 - 12 11 Duan 13 12 Chang 14 13 - 15 14 Duan 16 15 Chang 17 16 - 18 17 - 19 18 Duan 20 19 - 21 20 - 22 21 - 23 22 Chang 24 23 - 25 24 Duan 26 25 - 27 26 Chang 28 27 - 29 28 - 30 29 - 31 30 Duan 32 31 - 33 32 - 34 33 - 35 34 - ...
output:
YES 68 69 118 120 227 237 221 225 265 266 314 323 304 309 343 346 345 352 338 341 347 350 392 401 436 439 469 471 473 474 463 472 480 482 495 499 477 483 567 570 604 613 584 588 576 577 738 744 739 743 730 732 848 851 809 841 881 886 911 930 947 951 1007 1029 964 1002 946 958 914 919 939 942 952 959...
result:
ok Correct.
Test #9:
score: 0
Accepted
time: 62ms
memory: 24784kb
input:
100000 2 1 - 3 2 - 4 3 - 5 4 - 6 5 Duan 7 6 - 8 7 - 9 8 Chang 10 9 - 11 10 Duan 12 11 - 13 12 Chang 14 13 Duan 15 14 - 16 15 Chang 17 16 - 18 17 Duan 19 18 - 20 19 Chang 21 20 Duan 22 21 Chang 23 22 - 24 23 Duan 25 24 Chang 26 25 Duan 27 26 - 28 27 - 29 28 Chang 30 29 Duan 31 30 Chang 32 31 - 33 32 ...
output:
YES 238 239 272 274 343 344 415 416 432 433 477 478 512 515 539 544 579 582 631 633 700 711 717 724 719 730 784 787 780 782 772 773 777 783 830 831 824 821 810 816 845 849 858 860 868 872 895 897 876 894 873 871 929 936 986 999 981 984 976 980 964 966 950 955 958 967 968 977 996 997 993 995 1038 103...
result:
ok Correct.
Test #10:
score: 0
Accepted
time: 31ms
memory: 25092kb
input:
100000 2 1 - 3 2 - 4 3 - 5 4 - 6 5 - 7 6 - 8 7 - 9 8 - 10 9 - 11 10 - 12 11 - 13 12 - 14 13 - 15 14 - 16 15 - 17 16 - 18 17 - 19 18 - 20 19 - 21 20 - 22 21 - 23 22 - 24 23 - 25 24 - 26 25 - 27 26 - 28 27 - 29 28 - 30 29 - 31 30 - 32 31 - 33 32 - 34 33 - 35 34 - 36 35 - 37 36 - 38 37 - 39 38 - 40 39 ...
output:
YES 4915 4986 6570 6738 13597 14195 22019 22308 31792 31800 38225 38186 43803 43898 41995 41864 42327 42725 43807 43871 43542 43953 46356 46361 47608 47755 46932 47521 44955 46885 48486 48399 49839 50116 49668 49912 53355 54823 54273 54714 53853 54239 52524 52947 55640 57456 58053 58348 59228 59658 ...
result:
ok Correct.
Test #11:
score: 0
Accepted
time: 44ms
memory: 23656kb
input:
100000 2 1 - 3 1 - 4 2 - 5 1 - 6 1 - 7 2 Duan 8 4 - 9 1 - 10 1 - 11 2 - 12 2 - 13 2 - 14 6 - 15 1 - 16 6 - 17 1 - 18 5 - 19 1 - 20 1 - 21 2 - 22 8 - 23 6 - 24 1 - 25 4 Duan 26 1 - 27 10 - 28 1 - 29 8 - 30 5 - 31 7 - 32 2 - 33 3 - 34 12 - 35 3 - 36 1 - 37 12 - 38 8 - 39 8 - 40 1 - 41 4 - 42 16 - 43 8...
output:
YES 34242 34406 14906 23870 28768 79207 36687 70523 32304 70759 50509 68052 36153 68751 3567 47669 18177 70173 56574 27598 50978 58218 47073 46683 6904 79895 4139 85751 17677 83196 65881 90916 25922 49996 44928 67031 28068 95211 19260 84697 43712 69374 32128 70765 12144 92289 30451 79850 51006 99611...
result:
ok Correct.
Test #12:
score: 0
Accepted
time: 44ms
memory: 23092kb
input:
100000 2 1 - 3 1 - 4 1 - 5 1 - 6 1 - 7 1 - 8 1 - 9 1 - 10 3 - 11 1 - 12 2 - 13 2 - 14 2 - 15 1 - 16 2 - 17 2 - 18 1 - 19 1 - 20 1 - 21 2 - 22 1 - 23 2 - 24 2 - 25 1 - 26 1 - 27 4 - 28 1 - 29 2 - 30 3 - 31 1 - 32 10 - 33 6 - 34 4 - 35 1 - 36 2 Duan 37 1 - 38 4 - 39 10 - 40 1 - 41 1 - 42 3 - 43 6 - 44...
output:
YES 15102 66302 37177 40113 67735 67876 70745 98880 21755 71970 6455 84919 62593 71830 75547 84740 85699 88398 39981 74239 13515 71421 19470 42744 37672 71660 90862 91238 13573 72747 68085 19357 6427 44673 4280 92721 10218 81223 15063 87004 358 45357 17731 33161 49326 65914 35687 90190 15964 91832 4...
result:
ok Correct.
Test #13:
score: 0
Accepted
time: 55ms
memory: 25672kb
input:
100000 2 1 Duan 3 1 Duan 4 1 Duan 5 1 Duan 6 1 Duan 7 1 - 8 1 Duan 9 1 Duan 10 1 - 11 1 Duan 12 1 - 13 1 Duan 14 1 Duan 15 1 Duan 16 1 Duan 17 1 Duan 18 2 - 19 1 Duan 20 1 Duan 21 2 - 22 2 Duan 23 1 Duan 24 1 Duan 25 1 Duan 26 1 Duan 27 2 Duan 28 1 Duan 29 2 Duan 30 1 Duan 31 2 Duan 32 1 - 33 1 Duan...
output:
YES 1136 15274 14063 27596 34955 38849 40110 41588 50491 54430 55203 61983 63894 69085 72241 72642 73765 75216 85544 88086 88697 95158 1197 30463 10786 18595 21493 24025 25178 30164 30800 40282 50699 52476 59910 76452 79238 86389 91441 96792 1212 35120 34098 46043 47433 49151 56601 57549 59254 65754...
result:
ok Correct.
Test #14:
score: 0
Accepted
time: 30ms
memory: 23600kb
input:
100000 2 1 - 3 1 - 4 1 - 5 1 - 6 1 - 7 1 - 8 1 - 9 1 - 10 1 - 11 1 - 12 1 - 13 1 Duan 14 1 - 15 1 - 16 1 - 17 1 - 18 1 - 19 1 - 20 1 - 21 1 - 22 1 - 23 1 - 24 1 - 25 1 - 26 1 - 27 1 - 28 1 - 29 1 Duan 30 1 - 31 1 - 32 2 Duan 33 1 - 34 1 - 35 1 Duan 36 1 - 37 1 - 38 1 - 39 1 - 40 1 - 41 1 - 42 1 - 43...
output:
YES 51260 62964 64799 73003 87232 98672 31245 38059 47626 58383 78385 82570 84269 91105 67893 90700 95599 97507 51711 96567 2480 84425 90521 97467 3614 97387 83393 29970 61421 61983 42873 63689 41552 87565 9547 97576 32 10200 2969 3281 3715 3958 3981 4406 4899 4989 5751 8199 8398 9076 9630 10568 113...
result:
ok Correct.
Test #15:
score: 0
Accepted
time: 33ms
memory: 23164kb
input:
100000 2 1 Duan 3 1 - 4 1 - 5 1 Duan 6 1 - 7 1 - 8 1 - 9 1 - 10 1 - 11 1 - 12 1 - 13 1 - 14 1 - 15 1 - 16 1 - 17 1 - 18 1 - 19 1 - 20 1 - 21 1 - 22 1 - 23 1 - 24 1 - 25 1 - 26 1 - 27 1 - 28 1 - 29 1 - 30 1 - 31 1 - 32 1 - 33 1 Duan 34 1 - 35 1 - 36 1 - 37 1 - 38 1 - 39 1 - 40 1 - 41 1 - 42 1 - 43 1 ...
output:
YES 24271 32530 37384 38484 38738 38753 39458 39709 43803 46496 49018 49313 51853 53261 54125 54934 56321 59449 60751 62015 70717 81679 89831 97806 18859 26046 28373 30675 33247 34688 39921 43694 44356 46485 54712 55259 57280 57761 58304 58424 61007 61172 68370 71317 73029 73977 76662 88437 93135 97...
result:
ok Correct.
Test #16:
score: 0
Accepted
time: 53ms
memory: 24952kb
input:
100000 2 1 Duan 3 1 Duan 4 1 - 5 1 Duan 6 1 - 7 1 Duan 8 1 Duan 9 1 Duan 10 1 Duan 11 1 - 12 1 - 13 1 - 14 1 Duan 15 1 Duan 16 1 Duan 17 1 - 18 1 Duan 19 1 Duan 20 1 Duan 21 1 - 22 1 - 23 1 Duan 24 1 Duan 25 1 Duan 26 1 - 27 1 - 28 1 Duan 29 1 Duan 30 1 - 31 1 Duan 32 1 Duan 33 1 - 34 1 Duan 35 1 - ...
output:
YES 336 82705 60220 72014 80211 95022 93125 94029 59250 85950 77242 89854 56243 61755 80147 86382 408 37709 86818 91748 87876 89771 452 83493 481 97158 614 92488 824 95750 86859 76526 78815 77425 60638 82710 34692 89238 11713 93523 4966 95747 4358 97446 4090 97896 3462 98648 2744 99847 2 86064 377 4...
result:
ok Correct.
Test #17:
score: 0
Accepted
time: 59ms
memory: 23824kb
input:
100000 2 1 - 3 1 - 4 2 - 5 2 - 6 2 Duan 7 3 - 8 1 - 9 1 - 10 6 - 11 3 - 12 2 - 13 7 - 14 1 - 15 9 - 16 11 - 17 13 - 18 9 - 19 16 - 20 19 - 21 8 - 22 5 - 23 14 - 24 21 - 25 21 - 26 16 - 27 5 - 28 5 - 29 19 - 30 8 - 31 24 - 32 30 - 33 12 Duan 34 9 - 35 12 Duan 36 6 - 37 15 - 38 26 - 39 29 - 40 13 - 41...
output:
NO
result:
ok Correct.
Test #18:
score: -100
Wrong Answer
time: 60ms
memory: 24560kb
input:
100000 2 1 Duan 3 2 Duan 4 3 - 5 3 Duan 6 4 - 7 4 Duan 8 3 Duan 9 2 - 10 4 Duan 11 8 Duan 12 6 - 13 3 Duan 14 6 Duan 15 7 Duan 16 6 Duan 17 14 Tong 18 7 - 19 16 Duan 20 14 Duan 21 12 Duan 22 20 Duan 23 14 Duan 24 19 - 25 2 Duan 26 22 - 27 24 Duan 28 8 Duan 29 4 Duan 30 23 Duan 31 24 Duan 32 23 Duan ...
output:
YES 32087 94206 44400 86101 24653 38129 83167 86393 19062 56505 57948 63492 61940 65030 45835 82477 26407 53403 18036 94475 8076 82278 49061 96418 17844 35535 67385 79364 22654 80815 26598 60352 20526 88811 26473 70144 77251 83985 1615 14708 34973 77049 22442 41105 39057 86702 30892 82616 47754 8107...
result:
wrong answer Edge 18059-3548 used twice.