QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#398336 | #1000. 边三连通分量 | _l_l_ | WA | 434ms | 54512kb | C++14 | 2.4kb | 2024-04-25 10:56:23 | 2024-04-25 10:56:23 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500005;
typedef unsigned long long ull;
vector<int> G[MAXN];
int dfn[MAXN], low[MAXN], instk[MAXN], times;
int scc[MAXN], btot; stack<int> stk;
void dfs1(int u, int f) {
dfn[u] = low[u] = ++times; instk[u] = 1; stk.push(u); for (int v : G[u]) {
if (v == f) {f = -1; continue;}
if (dfn[v] == 0) dfs1(v, u), low[u] = min(low[u], low[v]);
else if (instk[v]) low[u] = min(low[u], dfn[v]);
}
if (dfn[u] == low[u]) {
int y; btot++; do {
y = stk.top(); stk.pop(); instk[y] = 0; scc[y] = btot;
} while (y != u);
}
}
map<ull, int> mp; set<ull> etmp; ull exor[MAXN];
mt19937_64 rnd(time(0));
void dfs2(int u, int f) {
dfn[u] = 1; instk[u] = 1; for (int v : G[u]) {
if (scc[v] != scc[u]) continue;
if (v == f) {f = -1; continue;}
if (dfn[v] == 0) dfs2(v, u), exor[u] ^= exor[v];
else if (instk[v]) {
ull tmp = rnd(); etmp.insert(tmp);
exor[u] ^= tmp; exor[v] ^= tmp;
}
}
instk[u] = 0;
}
vector<vector<int>> ans;
void dfs3(int u, int f) {
dfn[u] = 2; for (int v : G[u]) {
if (scc[v] != scc[u]) continue;
if (v == f) {f = -1; continue;}
if (dfn[v] == 1) {
stk.push(-u-1); dfs3(v, u);
if (etmp.count(exor[v])) {
vector<int> res; int y; do {
y = stk.top(); stk.pop(); if (y >= 0) res.push_back(y);
} while (y != -u-1);
ans.push_back(res);
}
else if (mp.find(exor[v]) != mp.end()) {
int w = mp[exor[v]], y; vector<int> res; do {
y = stk.top(); stk.pop(); if (y > 0) res.push_back(y);
} while (y != w);
stk.push(w); res.pop_back(); ans.push_back(res);
}
else mp[exor[v]] = v;
}
}
stk.push(u);
}
int main() {
int n, m; scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
int u, v; scanf("%d %d", &u, &v); if (u == v) continue;
G[u].push_back(v); G[v].push_back(u);
}
for (int i = 0; i < n; i++) if (dfn[i] == 0) dfs1(i, i);
memset(dfn, 0, sizeof dfn);
for (int i = 0; i < n; i++) {
if (dfn[i] == 0) {
dfs2(i, i), dfs3(i, i);
vector<int> res; while (stk.empty() == 0) {
if (stk.top() >= 0) res.push_back(stk.top()); stk.pop();
}
ans.push_back(res);
}
}
for (auto &x : ans) sort(x.begin(), x.end());
sort(ans.begin(), ans.end(), [](vector<int> &x, vector<int> &y) {return x[0] < y[0];});
printf("%d\n", (int)ans.size());
for (auto &x : ans) {
printf("%d ", (int)x.size());
for (auto y : x) printf("%d ", y); puts("");
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 9ms
memory: 21924kb
input:
4 5 0 2 0 1 3 0 2 1 2 3
output:
3 2 0 2 1 1 1 3
result:
ok OK
Test #2:
score: 0
Accepted
time: 6ms
memory: 21720kb
input:
13 21 4 5 8 7 12 3 3 10 1 5 10 2 0 0 11 4 2 12 9 1 9 0 7 8 7 6 9 1 8 2 12 10 11 0 8 6 3 2 5 9 4 11
output:
6 1 0 3 1 5 9 4 2 3 10 12 2 4 11 1 6 2 7 8
result:
ok OK
Test #3:
score: 0
Accepted
time: 393ms
memory: 54512kb
input:
200000 200000 127668 148778 77100 11865 85144 199231 39485 84917 102044 187263 130204 174776 26220 198288 162188 12078 92196 146334 120537 38083 150353 160479 18707 6545 101149 25450 62271 9177 38892 6454 11709 191939 89247 145109 140599 121858 197410 148980 55975 169098 128576 59852 68224 182347 89...
output:
156853 1 0 43148 1 2 3 4 9 12 13 17 22 36 46 51 52 56 58 61 70 74 77 78 84 98 99 102 117 123 130 133 136 141 161 164 172 174 175 177 184 189 190 192 195 212 220 221 225 232 233 234 246 256 262 267 268 270 272 274 282 283 284 289 295 300 303 305 313 323 358 359 363 366 367 375 384 386 387 392 396 40...
result:
ok OK
Test #4:
score: 0
Accepted
time: 434ms
memory: 54256kb
input:
200000 200000 150762 148756 172967 108322 69862 125085 84513 111056 141009 156725 36311 103205 31879 79919 62895 63377 21697 115522 161610 160423 113104 10277 106927 168428 136657 198931 52292 164110 149020 7038 115111 112823 35584 124385 45429 191603 96444 30523 195578 149089 160105 58103 139792 27...
output:
156961 43040 0 1 3 4 5 8 11 16 21 23 27 33 42 45 50 59 63 67 74 75 87 91 100 108 112 114 116 123 129 134 135 136 138 140 142 145 151 155 156 157 163 164 167 172 173 176 180 184 191 193 197 203 204 205 208 212 219 220 233 246 250 251 262 265 266 267 271 273 278 279 286 291 292 293 297 299 303 306 307...
result:
ok OK
Test #5:
score: 0
Accepted
time: 432ms
memory: 53724kb
input:
200000 200000 53335 120202 193029 92221 8244 61648 50176 7825 97274 91479 85438 76999 26861 80116 162826 198446 160509 95916 143190 116619 121254 192931 121545 132273 149400 91882 97032 5048 179008 82221 187475 70697 159074 65868 158744 94466 120006 170635 36429 162768 61114 17876 131798 188508 1080...
output:
156803 43197 0 1 8 17 25 33 34 44 51 59 60 62 63 65 78 85 90 91 93 95 98 100 104 106 108 117 118 122 141 142 146 149 150 155 156 163 167 168 182 183 185 186 189 197 199 210 224 231 234 235 246 254 256 271 276 287 293 294 296 297 298 301 303 309 311 313 314 320 321 324 338 340 348 353 356 362 363 366...
result:
ok OK
Test #6:
score: 0
Accepted
time: 270ms
memory: 44636kb
input:
127669 148779 124640 77100 11865 117450 85144 68159 104241 39485 76372 84917 102044 56191 43704 26220 67216 31116 75749 123504 12078 92196 70006 15262 100591 74552 120537 38083 19281 29407 18707 6545 101149 25450 62271 9177 38892 6454 11709 119710 60867 89247 14037 9527 121858 66338 112298 81804 795...
output:
85614 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 42056 9 11 12 15 19 21 22 35 36 44 47 50 51 52 62 63 64 65 66 67 73 74 77 78 79 80 84 87 90 91 93 96 97 100 105 111 112 119 123 125 128 130 131 132 136 139 140 144 150 151 155 157 160 161 164 166 172 173 175 176 177 179 181 184 188 190 195 200 212 2...
result:
ok OK
Test #7:
score: 0
Accepted
time: 250ms
memory: 44600kb
input:
150763 148757 108322 69862 125085 84513 111056 141009 36311 103205 31879 79919 62895 63377 21697 115522 113104 10277 106927 136657 52292 149020 7038 115111 112823 35584 124385 45429 96444 30523 149089 58103 139792 27250 15883 109949 69372 132387 141930 113408 65522 128254 138198 141969 42522 92075 1...
output:
119909 30855 0 1 3 4 5 8 11 12 16 21 23 27 33 42 45 48 50 56 63 67 72 74 75 79 87 89 91 100 108 114 116 118 123 132 134 135 136 138 140 142 144 145 151 155 156 163 164 166 167 172 173 176 184 193 197 204 205 212 217 219 220 226 233 246 251 256 262 266 267 269 271 273 278 279 286 291 292 293 294 297 ...
result:
ok OK
Test #8:
score: 0
Accepted
time: 188ms
memory: 36388kb
input:
53336 120203 26685 8244 50176 7825 31738 24370 25943 19902 11463 26861 29977 26309 14580 31754 1838 29437 30380 12118 51083 31633 1201 18328 26346 5295 48935 19027 31496 19906 41783 5048 47936 16685 5161 34107 15907 28002 332 27672 28930 39563 36429 31696 17876 726 42526 21682 35319 8727 17974 25252...
output:
9550 43787 0 3 4 5 6 8 9 10 11 14 15 17 18 22 23 24 25 26 27 28 29 30 32 33 34 36 37 38 39 40 41 43 44 45 47 48 49 50 51 52 54 55 56 57 58 59 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 78 79 80 82 83 84 85 86 88 89 90 91 92 93 94 95 96 97 101 102 103 104 105 106 107 108 109 110 111 112 114 115 ...
result:
ok OK
Test #9:
score: -100
Wrong Answer
time: 62ms
memory: 27472kb
input:
17707 71661 1354 3272 13699 17294 16733 9246 14993 5758 7252 2983 3813 6121 10450 14069 8088 11201 857 4420 12788 2032 11938 1465 10322 15171 14688 1857 2309 2742 2013 13200 14142 16319 10541 1922 10368 1516 7994 9092 3327 5166 13484 2876 15472 13522 15622 13479 3361 15314 15464 14974 17637 7535 435...
output:
354 402 0 12 20 44 81 108 129 345 391 414 430 437 455 489 573 645 665 786 841 866 872 925 945 965 991 1023 1082 1094 1099 1136 1184 1187 1223 1227 1228 1248 1416 1420 1437 1473 1522 1543 1559 1576 1592 1628 1648 1728 1754 1842 1851 1880 1925 1930 1994 2087 2283 2384 2473 2488 2523 2537 2552 2610 268...
result:
wrong answer tecc is differ