QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#558865 | #8220. 众生之门 | The_cosmos | 10 | 773ms | 20112kb | C++14 | 4.1kb | 2024-09-11 18:57:07 | 2024-09-11 18:57:08 |
Judging History
answer
#include <bits/stdc++.h>
#define REP(i, first, last) for (int i = (first); i <= (last); ++i)
#define DOW(i, first, last) for (int i = (first); i >= (last); --i)
using namespace std;
// #define int long long
#define pb emplace_back
#define ull unsigned long long
const int N = 5e5 + 5, M = 2e5 + 5, Sg = 26;
const int mod1 = 1e9 + 9, mod2 = 998244353;
const long long inf = 1e18;
const int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
const int dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
const int P = 1ll << 21, S = P - 1;
struct Graph {
struct edge {
int from, to, next;
int w;
} e[N << 1];
int cnt, n, head[N];
void ins(int u, int v, int w = 0) {
e[++cnt] = {u, v, head[u], w}, n = max({n, u, v}), head[u] = cnt;
}
void twi(int u, int v, int w = 0) { ins(u, v, w), ins(v, u, w); }
void clear() {
for (int i = 1; i <= cnt; i++) head[e[i].from] = 0;
cnt = 0;
}
#define FEG(u, v, W, G, i) \
for (int i = G.head[u], v = G.e[i].to, W = G.e[i].w; i; \
i = G.e[i].next, v = G.e[i].to, W = G.e[i].w)
} G;
int n, s, t;
int pos[N];
struct LCA {
int dfn[N], dfncnt = 0, pre[N], siz[N], f[N][25], dep[N];
void dfs(int u, int fa) {
dfn[u] = ++dfncnt;
dep[u] = dep[fa] + 1;
pre[dfncnt] = u;
f[u][0] = fa;
REP(i, 1, 20) f[u][i] = f[f[u][i - 1]][i - 1];
FEG(u, v, W, G, i) {
if (v == fa) continue;
dfs(v, u);
pre[++dfncnt] = u;
}
}
int logn[N << 1];
int st[N << 1][25];
void init() {
logn[0] = -1;
REP(i, 1, dfncnt) {
logn[i] = logn[i / 2] + 1;
st[i][0] = pre[i];
}
for (int j = 1; (1 << j) <= dfncnt; j++) {
for (int i = 1; i + (1 << j) <= dfncnt + 1; i++) {
int u = st[i][j - 1], v = st[i + (1 << (j - 1))][j - 1];
st[i][j] = ((dep[u] > dep[v]) ? v : u);
}
}
}
int lca(int l, int r) {
int ql = dfn[l], qr = dfn[r];
if (qr < ql) swap(qr, ql);
int k = logn[qr - ql + 1];
return (dep[st[ql][k]] < dep[st[qr - (1 << k) + 1][k]]
? st[ql][k]
: st[qr - (1 << k) + 1][k]);
}
int dist(int u, int v) {
int w = lca(u, v);
return dep[u] + dep[v] - 2 * dep[w];
}
} f;
bool check() {
REP(u, 1, n) {
int ans = 0;
FEG(u, v, w, G, i) {
ans ++;
}
if(ans == n - 1) return 1;
}
return 0;
}
mt19937_64 rnd(chrono :: system_clock().now().time_since_epoch().count());
int rand(int l, int r) {
return rnd() % (r - l + 1) + l;
}
int get(int x) {
return f.dist(pos[x], pos[x - 1]) ^ f.dist(pos[x], pos[x + 1]);
}
bool vis[N];
int ans = 5, opt[N];
void answer() {
int res = 0;
REP(i, 1, n - 1) res ^= f.dist(pos[i], pos[i + 1]);
if(res < ans) {
ans = res;
REP(i, 1, n) opt[i] = pos[i];
}
}
void dfs(int u) {
if(u > n - 1) return answer();
REP(i, 1, n) {
if(!vis[i] && f.dist(i, pos[u - 1]) > 4) continue;
pos[u] = i, vis[i] = 1;
dfs(u + 1), vis[i] = 0;
}
}
void Solve() {
cin >> n >> s >> t;
// cerr << "qwq";
G.clear(), f.dfncnt = 0;
REP(i, 2, n) {
int u, v;
cin >> u >> v;
G.twi(u, v);
}
pos[1] = s, pos[n] = t;
int l = 1;
REP(i, 2, n - 1) {
while (l == s || l == t) l++;
pos[i] = l, l ++;
}
// REP(i, 1, n) cerr << pos[i] << ' ';
// cerr << '\n';
f.dfs(1, 0), f.init();
int res = 0;
REP(i, 1, n - 1) res ^= f.dist(pos[i], pos[i + 1]);
if(check()) {
REP(i, 1, n) cout << pos[i] << ' ';
cout << '\n';
return ;
}
if(n < 9) {
REP(i, 1, n) vis[i] = 0;
vis[s] = vis[t] = 1;
ans = 5, dfs(2);
REP(i, 1, n) cout << opt[i] << ' ';
cout << '\n';
return ;
}
while(res > 1) {
int x = rand(2, n - 1), y = rand(2, n - 1);
while(x == y) y = rand(2, n - 1);
res ^= get(x) ^ get(y);
swap(pos[x], pos[y]);
res ^= get(x) ^ get(y);
}
REP(i, 1, n) cout << pos[i] << ' ';
cout << '\n';
}
signed main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int T = 1;
cin >> T;
while (T--) {
Solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 18048kb
input:
114 6 5 6 2 6 1 6 4 5 3 1 6 4 6 3 6 2 4 4 1 6 4 1 5 5 3 6 6 1 5 2 1 2 4 6 2 4 3 2 6 6 1 3 6 5 3 1 6 4 2 2 5 6 3 1 5 3 2 4 1 5 4 3 6 3 4 3 4 2 3 1 4 4 3 6 3 1 2 3 6 3 4 3 1 6 5 1 5 3 2 1 2 4 2 2 3 5 2 6 1 4 2 1 5 2 4 1 6 2 3 6 6 5 1 4 2 6 5 1 3 2 6 3 2 4 4 1 2 4 3 4 1 4 6 2 5 3 5 4 6 1 4 6 2 5 4 6 1 ...
output:
5 1 1 1 2 6 3 1 1 1 1 6 6 1 1 2 3 1 6 1 1 1 1 1 3 1 1 3 5 1 3 1 3 4 3 1 1 2 4 1 3 1 4 5 2 1 1 1 1 1 4 5 1 1 2 5 1 4 2 3 1 2 1 1 1 1 5 1 1 1 1 2 3 3 1 1 1 1 1 2 1 1 1 2 4 3 1 2 5 6 4 5 1 1 1 1 3 1 1 1 3 5 4 1 3 2 3 1 1 1 4 1 1 2 4 3 1 3 2 5 1 1 1 2 5 1 2 3 1 5 1 1 1 2 3 4 1 1...
result:
FAIL Your output should be a permutation in test case 1.
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #11:
score: 0
Wrong Answer
time: 169ms
memory: 20104kb
input:
14190 43 27 2 42 3 30 36 11 24 21 22 13 8 22 30 31 29 35 1 10 6 2 23 28 17 2 26 7 37 5 19 38 43 33 39 4 28 33 7 25 31 15 1 32 18 34 27 35 12 19 32 20 17 37 42 26 34 39 10 12 27 24 43 18 6 16 9 38 9 14 15 14 41 25 3 40 13 16 8 36 41 20 5 21 40 11 29 41 24 38 21 6 20 14 26 1 6 7 17 16 39 36 8 18 36 11...
output:
27 25 5 40 12 4 3 33 17 18 34 16 13 15 10 7 30 20 38 28 8 31 26 41 24 36 35 22 19 39 42 32 43 29 14 9 21 23 11 6 1 37 2 24 16 1 22 8 20 5 25 2 10 13 11 15 18 37 34 28 4 32 41 14 33 17 12 3 23 30 35 9 29 40 26 6 7 21 19 31 27 39 36 38 5 19 2 20 18 24 7 12 9 10 25 13 23 15 8 16 4 1 27 6 21 14 17 11 ...
result:
FAIL Your output should be a permutation in test case 284.
Subtask #4:
score: 0
Wrong Answer
Test #18:
score: 0
Wrong Answer
time: 773ms
memory: 18036kb
input:
32752 15 3 4 14 12 4 12 1 10 9 13 7 6 12 5 1 12 9 15 7 9 8 12 2 6 11 6 9 3 6 10 13 12 2 10 11 10 5 1 4 12 11 4 6 2 13 6 5 9 6 8 13 6 3 4 8 13 7 15 3 6 15 10 4 2 8 5 10 3 1 3 15 2 8 4 12 9 7 8 11 8 6 13 8 12 14 8 6 12 15 5 7 8 14 10 13 11 13 13 5 2 14 15 8 15 1 6 2 7 15 9 13 15 3 6 13 15 4 12 5 15 10...
output:
3 1 2 5 6 7 8 9 10 11 12 13 14 15 4 12 1 3 4 5 9 7 10 11 8 6 13 2 3 1 2 4 5 7 8 9 10 11 12 13 14 15 6 5 6 12 13 4 3 8 9 1 10 2 14 11 15 7 10 12 2 3 4 5 6 1 9 11 7 13 14 15 8 11 6 5 2 4 7 10 8 1 9 3 11 1 2 3 4 5 6 7 8 10 12 13 14 15 9 14 1 2 3 4 5 7 13 8 6 10 11 9 12 5 11 2 8 6 7 10 1 9 4 3 ...
result:
FAIL Your output should be a permutation in test case 416.
Subtask #5:
score: 0
Time Limit Exceeded
Test #25:
score: 0
Time Limit Exceeded
input:
36059 13 9 4 5 9 10 3 3 1 13 5 12 5 7 4 2 8 8 10 4 9 11 7 6 11 1 4 13 12 6 4 12 13 9 11 2 6 12 9 12 8 5 7 6 5 3 3 7 10 8 1 5 2 10 13 10 8 3 1 5 9 4 8 6 11 7 13 13 5 1 10 12 13 9 4 11 9 2 11 8 10 12 1 4 9 2 2 12 3 2 12 11 8 2 7 4 5 1 4 1 11 7 10 9 6 9 13 10 12 7 5 11 9 12 10 9 8 3 10 8 5 4 13 13 7 6 ...
output:
9 8 11 5 2 10 7 1 12 13 3 6 4 12 8 2 3 10 11 7 1 9 5 4 13 6 10 7 13 6 12 5 11 1 9 2 4 3 8 1 2 10 8 3 11 6 9 5 12 7 4 10 7 2 9 4 5 6 1 8 3 11 13 12 6 3 2 1 4 12 7 13 10 11 9 5 8 1 2 3 4 5 6 7 9 10 11 12 13 8 7 1 2 4 8 10 9 5 6 3 11 2 3 5 7 8 13 6 4 10 12 9 1 4 1 2 3 5 7 8 9 10 11 12 13 6 6 ...
result:
Subtask #6:
score: 10
Accepted
Test #34:
score: 10
Accepted
time: 5ms
memory: 18072kb
input:
10 1000 165 244 175 661 738 362 280 462 776 922 231 578 963 615 639 836 32 418 519 220 565 733 239 951 768 847 196 200 246 119 591 288 994 586 313 46 971 515 512 811 228 908 627 339 33 337 447 488 616 319 399 727 921 615 421 509 167 354 905 382 20 356 875 414 619 904 824 940 435 244 953 663 719 962 ...
output:
165 1 2 3 4 227 776 7 8 980 10 11 12 13 14 15 16 17 18 285 295 448 22 440 24 25 26 27 321 29 30 31 32 231 34 176 36 557 335 39 245 870 42 43 44 45 46 47 48 49 50 51 52 53 54 310 405 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 462 76 951 78 79 80 81 82 83 6 85 86 87 88 89 109 371 427 93 913...
result:
ok Answer correct!
Test #35:
score: 10
Accepted
time: 5ms
memory: 17984kb
input:
10 1000 382 266 590 318 797 98 35 830 950 354 905 784 998 709 853 583 165 498 288 727 822 759 576 543 193 715 883 839 847 872 255 61 995 187 125 742 575 697 621 939 711 248 445 683 848 907 171 215 511 807 196 453 166 930 231 716 327 96 866 680 909 549 188 554 33 273 486 74 32 577 37 573 376 148 709 ...
output:
382 461 2 3 4 5 6 7 8 9 10 11 12 13 14 605 16 17 18 19 20 646 22 23 24 25 26 991 28 29 554 31 32 33 34 35 734 37 38 39 78 41 42 43 44 45 46 47 48 49 50 51 52 53 54 739 56 57 58 59 60 61 62 477 64 65 66 67 68 984 70 71 72 73 74 75 76 77 40 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 9...
result:
ok Answer correct!
Test #36:
score: 10
Accepted
time: 0ms
memory: 18068kb
input:
10 1000 252 455 479 592 266 350 335 8 117 54 580 751 999 484 73 339 97 325 96 336 629 247 947 425 374 458 666 716 498 402 859 866 361 441 627 365 372 505 456 485 376 379 422 416 72 498 489 369 211 537 909 508 12 23 523 738 714 383 556 447 548 773 521 353 76 581 555 780 565 148 672 15 570 768 888 39 ...
output:
252 147 2 3 4 689 6 7 8 807 10 11 12 13 821 15 16 17 18 870 20 21 22 23 24 25 965 27 631 29 796 31 32 33 34 35 36 37 512 39 40 41 42 337 44 684 46 47 48 49 50 51 52 53 54 887 56 57 58 71 245 61 62 63 64 913 919 67 188 69 70 59 72 583 74 75 76 476 78 79 80 81 82 724 84 85 86 83 88 89 90 91 92 93 94 9...
result:
ok Answer correct!
Test #37:
score: 10
Accepted
time: 4ms
memory: 17940kb
input:
10 1000 304 234 651 949 290 646 953 375 867 994 71 810 114 466 924 223 583 869 947 766 627 169 100 616 847 801 20 138 886 364 320 941 866 188 408 606 762 366 842 325 934 184 122 918 736 773 348 289 876 770 913 227 274 176 727 87 18 280 305 595 774 884 441 582 328 711 829 836 891 503 45 971 804 500 6...
output:
304 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 290 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 782 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 10...
result:
ok Answer correct!
Test #38:
score: 10
Accepted
time: 2ms
memory: 20112kb
input:
10 1000 105 350 300 724 309 285 319 499 170 893 469 224 304 775 964 858 625 758 529 516 328 239 585 559 341 670 135 549 810 328 439 251 49 198 265 691 30 101 146 261 376 929 981 434 980 439 191 601 764 888 731 801 706 824 203 210 83 419 41 812 176 472 226 117 156 280 996 478 902 761 75 57 542 969 36...
output:
105 1 2 553 4 5 6 7 826 9 10 11 12 13 14 329 16 961 18 470 154 21 22 23 24 25 26 27 28 29 321 31 32 33 34 35 909 37 38 830 40 41 42 43 44 45 46 47 48 49 50 317 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 136 70 71 72 73 540 75 76 77 78 79 80 81 220 83 84 85 86 87 88 89 90 91 92 611 94 263 96 ...
result:
ok Answer correct!
Subtask #7:
score: 0
Skipped
Dependency #2:
0%