QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#107158 | #6396. Puzzle: Kusabi | kingsnow | WA | 60ms | 16476kb | C++14 | 4.2kb | 2023-05-20 14:56:34 | 2023-05-20 14:56:37 |
Judging History
answer
//#pragma GCC optimize(3,"Ofast","inline")
//#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define getchar nc
#define sight(c) ('0'<=c&&c<='9')
#define swap(a,b) a^=b,b^=a,a^=b
#define LL long long
#define debug(a) cout<<#a<<" is "<<a<<"\n"
#define dput(a) puts("a")
#define eho(x) for(int i=head[x];i;i=net[i])
#define fi first
#define se second
inline char nc(){
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
template <class T>
inline void read(T &x){// unsigned
static char c;
for (c=getchar();!sight(c);c=getchar());
for (x=0;sight(c);c=getchar())x=x*10+c-48;
}
template <class T> void write(T x){if (x<10) {putchar('0'+x); return;} write(x/10); putchar('0'+x%10);}
template <class T> inline void writeln(T x){ if (x<0) putchar('-'),x*=-1; write(x); putchar('\n'); }
template <class T> inline void writel(T x){ if (x<0) putchar('-'),x*=-1; write(x); putchar(' '); }
using namespace std;
#define pii pair<int,int>
#define pb push_back
#define N 200007
int n,f[N],dep[N];
char ch[N][17];
vector<int> V[N];
vector<pii> ans,Vd,Vc;
bool check(const vector<int> &duan, const vector<int> &chang) {
int n=duan.size();
if ((int)chang.size()!=n) return false;
for (int i=0;i<n;i++)
if (dep[duan[i]]>=dep[chang[i]]) return false;
return true;
}
bool cmp(int u, int v) {return dep[u] < dep[v];}
int dfs(int u) {
vector<int> chang, duan;
map<int, int> tong;
V[u].pb(u);
for (auto v:V[u]) {
int x = v;
if (v!=u) {
dep[v] = dep[u] + 1;
x = dfs(v);
}
if (!x) continue;
if (ch[x][0] == 'C') chang.push_back(x);
else if (ch[x][0] == 'D') duan.push_back(x);
else if (ch[x][0] == 'T') {
if (tong[dep[x]]) {
ans.push_back({tong[dep[x]], x});
tong[dep[x]] = 0;
} else {
tong[dep[x]] = x;
}
}
}
sort(duan.begin(), duan.end(), cmp);
sort(chang.begin(), chang.end(), cmp);
int D = duan.size(), C = chang.size();
vector<int> odd;
for (auto Z: tong) if (Z.se) odd.push_back(Z.se);
if ((int) odd.size() > 1) {
printf("NO\n");
exit(0);
}
if ((int) odd.size() == 1) {
if (!check(duan, chang)) {
printf("NO\n");
exit(0);
}
for(int i=0;i<min(C, D);i++) ans.push_back({duan[i], chang[i]});
return odd[0];
}
if (abs(D - C) > 1) {
printf("NO\n");
return 0;
}
if (D == C) {
if (!check(duan, chang)) {
printf("NO\n");
return 0;
}
for(int i=0;i<min(C, D);i++) ans.push_back({duan[i], chang[i]});
return 0;
}
int res = -1;
if (D == C + 1) {
int l = 0, r = D - 1;
while (l <= r) {
int mid = (l + r) >> 1;
auto n_duan = duan;
n_duan.erase(n_duan.begin() + mid);
if (check(n_duan, chang)) {
res = duan[mid];
r = mid - 1;
} else {
l = mid + 1;
}
}
duan.erase(find(duan.begin(), duan.end(), res));
} else {
int l = 0, r = C - 1;
while (l <= r) {
int mid = (l + r) >> 1;
auto n_chang = chang;
n_chang.erase(n_chang.begin() + mid);
if (check(duan, n_chang)) {
res = chang[mid];
l = mid + 1;
} else {
r = mid - 1;
}
}
chang.erase(find(chang.begin(), chang.end(), res));
}
if (res == -1) {
printf("NO\n");
exit(0);
}
for(int i=0;i<min(C, D);i++) ans.push_back({duan[i], chang[i]});
return res;
}
signed main() {
#ifdef LOCAL
// freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
#endif
scanf("%d",&n);
for(int i=2;i<=n;i++) {
scanf("%d%d%s",&i,&f[i],ch[i]);
V[f[i]].push_back(i);
}
if (dfs(1)) {
printf("NO\n");
return 0;
}
printf("YES\n");
for (auto Z:ans)
printf("%d %d\n",Z.fi,Z.se);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 10696kb
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: 1ms
memory: 9204kb
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: 1ms
memory: 10440kb
input:
2 2 1 Tong
output:
NO
result:
ok Correct.
Test #4:
score: 0
Accepted
time: 41ms
memory: 15620kb
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 6569 30148 2008 11412 46703 64525 70618 71289 47748 81204 20514 42353 46131 97634 82155 83516 62410 66867 9975 15712 3205 4978 5622 83026 10902 48783 8453 22475 30893 82167 65878 93809 33377 66951 66936 94549 64411 79128 36857 54702 629...
result:
ok Correct.
Test #5:
score: 0
Accepted
time: 33ms
memory: 15672kb
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 91669 86909 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: 60ms
memory: 15160kb
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 2179 2259 3657 3778 2668 3580 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: 37ms
memory: 14136kb
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: 44ms
memory: 14424kb
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 399 400 436 439 469 471 473 474 463 472 480 482 495 499 477 483 567 570 557 558 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...
result:
ok Correct.
Test #9:
score: 0
Accepted
time: 44ms
memory: 16156kb
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 164 165 238 239 272 274 343 344 415 416 432 433 477 478 512 515 539 544 579 582 631 633 700 711 703 705 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 ...
result:
ok Correct.
Test #10:
score: 0
Accepted
time: 19ms
memory: 15756kb
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: 38ms
memory: 14452kb
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 50509 68052 32304 70759 36687 70523 36153 68751 3567 47669 18177 70173 50978 58218 56574 27598 6904 46683 47073 79895 44928 67031 4139 85751 17677 83196 65881 90916 25922 49996 28068 95211 43712 69374 19260 84697 32128 70765 30451 79850 12144 92289 51006 99611...
result:
ok Correct.
Test #12:
score: 0
Accepted
time: 34ms
memory: 16476kb
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 75547 84740 70745 98880 88398 71830 62593 85699 6455 71970 21755 94458 39981 74239 37672 71660 13515 71421 90862 91238 19470 42744 13573 72747 15063 87004 10218 81223 4280 19357 6427 44673 68085 92721 17731 33161 358 45357 49326 65914 45470 93622 15964 91832 3...
result:
ok Correct.
Test #13:
score: 0
Accepted
time: 41ms
memory: 14368kb
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 14063 27596 34955 38849 40110 41588 50491 54430 55203 61983 63894 69085 72241 72642 73765 75216 85544 88086 88697 95158 1136 15274 10786 18595 21493 24025 25178 30164 30800 40282 50699 52476 59910 76452 79238 86389 91441 96792 1197 30463 34098 46043 47433 49151 56601 57549 59254 65754 66989 8754...
result:
ok Correct.
Test #14:
score: 0
Accepted
time: 26ms
memory: 16076kb
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 65926 77306 2480 84425 90521 97467 2969 3281 99880 90471 3614 97387 3715 3958 3981 4406 4899 4989 5751 8199 8398 9076 9630 10568 11395 12991 13882 17448 17840 18138 18144 20327...
result:
ok Correct.
Test #15:
score: 0
Accepted
time: 30ms
memory: 16048kb
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: 40ms
memory: 16084kb
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 86818 91748 408 37709 87876 89771 452 83493 377 464 481 97158 564 569 570 577 614 92488 624 630 664 722 745 774 775 781 783 793 824 95750 805 831 837 839 843 865 866 880 895 915 919 921 933 948 954 1007...
result:
ok Correct.
Test #17:
score: -100
Wrong Answer
time: 37ms
memory: 14132kb
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 NO NO NO
result:
wrong output format Extra information in the output file