QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#410569 | #6222. 精准预测 | Max_s_xaM | 40 | 1625ms | 498148kb | C++17 | 5.5kb | 2024-05-14 09:48:35 | 2024-05-14 09:48:36 |
Judging History
answer
#include <iostream>
#include <algorithm>
#include <queue>
#include <bitset>
typedef long long ll;
typedef double lf;
// #define DEBUG 1
struct IO
{
#define MAXSIZE (1 << 20)
#define isdigit(x) (x >= '0' && x <= '9')
char buf[MAXSIZE], *p1, *p2;
char pbuf[MAXSIZE], *pp;
#if DEBUG
#else
IO() : p1(buf), p2(buf), pp(pbuf) {}
~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
#endif
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
#define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')
template <typename T>
void Read(T &x)
{
#if DEBUG
std::cin >> x;
#else
bool sign = 0; char ch = gc(); x = 0;
for (; !isdigit(ch); ch = gc())
if (ch == '-') sign = 1;
for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
if (sign) x = -x;
#endif
}
void Read(char *s)
{
#if DEBUG
std::cin >> s;
#else
char ch = gc();
for (; blank(ch); ch = gc());
for (; !blank(ch); ch = gc()) *s++ = ch;
*s = 0;
#endif
}
void Read(char &c) {for (c = gc(); blank(c); c = gc());}
void Push(const char &c)
{
#if DEBUG
putchar(c);
#else
if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
*pp++ = c;
#endif
}
template <typename T>
void Write(T x)
{
if (x < 0) x = -x, Push('-');
static T sta[35];
int top = 0;
do sta[top++] = x % 10, x /= 10; while (x);
while (top) Push(sta[--top] ^ 48);
}
template <typename T>
void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)
using namespace std;
const int MAXN = 5e4 + 10, MAXM = 1e5 + 10, MAXV = 5e5 + 10;
int t, n, m, ans[MAXN];
struct Edge
{
int op, x, u, v;
}e[MAXM];
vector <int> pt[MAXN], vid[MAXN];
vector <int> g[MAXV];
int vt;
int dfn[MAXV], low[MAXV], clk, scc[MAXV], num;
int st[MAXV], top; bool inq[MAXV];
void Tarjan(int u)
{
dfn[u] = low[u] = ++clk, st[++top] = u, inq[u] = 1;
for (auto v : g[u])
{
if (!dfn[v]) Tarjan(v), low[u] = min(low[u], low[v]);
else if (inq[v]) low[u] = min(low[u], dfn[v]);
}
if (dfn[u] == low[u])
{
++num;
while (st[top] != u) scc[st[top]] = num, inq[st[top]] = 0, top--;
scc[u] = num, inq[u] = 0, top--;
}
}
vector <int> tr[MAXV];
int vise[MAXV];
const int MAXB = 5002, B = 5000;
bitset <MAXB> to[2][MAXV];
int main()
{
// freopen("A.in", "r", stdin);
// freopen("A.out", "w", stdout);
#if DEBUG
#else
ios::sync_with_stdio(0), cin.tie(0);
#endif
Read(t), Read(n), Read(m);
for (int i = 1; i <= m; i++)
{
Read(e[i].op), Read(e[i].x), Read(e[i].u), Read(e[i].v);
pt[e[i].u].push_back(e[i].x), pt[e[i].v].push_back(e[i].x + (e[i].op ^ 1));
}
for (int i = 1; i <= n; i++)
{
pt[i].push_back(t + 1);
sort(pt[i].begin(), pt[i].end());
int sz = unique(pt[i].begin(), pt[i].end()) - pt[i].begin();
pt[i].resize(sz), vid[i].resize(sz);
// cout << i << ' ' << sz << '\n';
// for (auto x : pt[i]) cout << x << ' '; cout << '\n';
int pre = 0;
for (int j = 0; j < sz; j++)
{
vid[i][j] = ++vt, vt++;
if (pre) g[vt - 1].push_back(pre), g[pre + 1].push_back(vt);
pre = vt - 1;
}
// for (auto x : vid[i]) cout << x << ' '; cout << '\n';
}
for (int i = 1; i <= m; i++)
{
int l = lower_bound(pt[e[i].u].begin(), pt[e[i].u].end(), e[i].x) - pt[e[i].u].begin();
int r = lower_bound(pt[e[i].v].begin(), pt[e[i].v].end(), e[i].x + (e[i].op ^ 1)) - pt[e[i].v].begin();
l = vid[e[i].u][l], r = vid[e[i].v][r];
// cout << l << ' ' << r << "\n";
if (e[i].op) g[l].push_back(r + 1), g[r].push_back(l + 1);
else g[l + 1].push_back(r + 1), g[r].push_back(l);
}
// for (int i = 1; i <= vt; i++)
// {
// for (auto v : g[i]) cout << i << ' ' << v << "\n";
// }
for (int i = 1; i <= vt; i++)
if (!dfn[i]) Tarjan(i);
// for (int i = 1; i <= vt; i++) cout << scc[i] << ' '; cout << '\n';
for (int i = 1; i <= vt; i++)
{
for (auto v : g[i])
if (scc[i] != scc[v]) tr[scc[i]].push_back(scc[v]);
}
for (int d = 1; d <= (n - 1) / B + 1; d++)
{
int l = (d - 1) * B + 1, r = min(n, d * B);
for (int i = 1; i <= num; i++) to[0][i].reset(), to[1][i].reset();
for (int i = l; i <= r; i++) to[0][scc[vid[i].back()]].set(i - l), to[1][scc[vid[i].back() + 1]].set(i - l);
for (int i = 1; i <= num; i++)
{
for (auto v : tr[i])
to[0][i] |= to[0][v], to[1][i] |= to[1][v];
}
for (int i = 1; i <= n; i++)
{
if (ans[i] == -1) continue;
int u = scc[vid[i].back()];
if ((to[0][u] & to[1][u]).count()) ans[i] = -1;
else ans[i] += to[1][u].count();
}
}
int c0 = 0;
for (int i = 1; i <= n; i++)
if (ans[i] == -1) c0++;
for (int i = 1; i <= n; i++)
if (ans[i] == -1) cout << "0 ";
else cout << n - 1 - c0 - ans[i] << ' ';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 10
Accepted
time: 0ms
memory: 38504kb
input:
2 10 10 0 1 5 3 0 1 10 10 1 1 4 4 1 1 10 3 0 1 2 5 1 1 8 1 1 1 10 8 0 1 2 2 1 2 10 3 1 2 8 3
output:
7 8 6 0 8 8 8 5 8 6
result:
ok 10 numbers
Test #2:
score: 0
Wrong Answer
time: 0ms
memory: 39320kb
input:
100 100 200 1 98 31 73 0 75 20 71 1 61 95 74 1 33 42 5 0 70 67 67 1 46 27 80 1 80 70 62 0 34 25 97 1 58 7 43 1 23 26 10 0 8 86 59 0 85 51 41 1 8 54 72 0 7 59 29 0 8 31 9 0 92 88 3 0 34 31 50 1 63 85 90 0 85 66 69 0 32 45 71 1 47 21 21 0 58 2 16 0 14 17 84 1 32 12 10 0 11 40 31 0 70 85 67 0 36 35 84 ...
output:
90 85 77 85 85 90 88 77 89 80 89 0 88 90 0 84 84 91 91 85 0 90 88 85 90 88 81 0 85 85 88 83 89 88 86 88 84 88 87 87 86 86 79 89 90 79 0 90 75 0 90 80 88 89 91 86 87 87 88 79 84 90 85 90 88 82 0 88 83 84 85 78 79 82 86 80 88 91 77 84 86 89 87 80 77 90 0 88 90 86 87 90 87 91 85 90 86 80 72 90
result:
wrong answer 3rd numbers differ - expected: '83', found: '77'
Test #3:
score: 10
Accepted
time: 0ms
memory: 41168kb
input:
100 100 200 0 18 72 87 0 26 100 8 1 2 84 58 1 90 92 65 0 31 23 62 1 69 70 52 1 87 74 45 0 71 1 17 1 2 64 54 1 51 43 62 0 3 17 44 1 18 41 27 0 21 67 30 1 67 76 22 0 66 76 59 1 53 49 78 0 96 47 49 1 52 78 95 0 59 73 60 1 20 64 40 0 39 20 70 0 46 63 69 0 62 8 14 0 6 33 47 1 52 39 45 1 11 70 30 0 86 26 ...
output:
91 88 98 99 92 94 98 96 96 98 96 98 97 95 96 95 85 97 89 98 95 97 92 99 96 93 93 94 98 94 98 93 91 98 96 91 99 89 89 86 89 96 92 96 93 94 85 95 82 91 96 98 90 93 96 97 91 90 94 92 91 95 95 89 96 93 99 98 99 87 98 94 95 96 93 97 96 95 93 88 90 94 99 86 95 91 97 92 87 96 85 94 99 98 92 93 96 95 99 92
result:
ok 100 numbers
Test #4:
score: 0
Wrong Answer
time: 12ms
memory: 65844kb
input:
1000000 3000 6000 0 1 1 1860 0 1 2 51 0 1 3 61 0 1 4 2721 0 1 5 596 0 1 6 2173 0 1 7 974 0 1 8 1525 0 1 9 706 0 1 10 451 0 1 11 2075 0 1 12 812 0 1 13 1117 0 1 14 299 0 1 15 2099 0 1 16 1521 0 1 17 2285 0 1 18 375 0 1 19 2894 0 1 20 1208 0 1 21 614 0 1 22 924 0 1 23 1670 0 1 24 867 0 1 25 2291 0 1 2...
output:
1494 1494 438 1494 226 542 518 133 1494 105 1494 942 113 714 1411 1494 81 1283 883 310 110 677 124 1207 1494 537 1494 184 421 338 1379 1494 603 354 1479 519 590 31 605 1494 366 729 1106 92 1429 313 1096 1494 781 271 625 944 383 1494 204 194 787 820 419 1494 206 845 1494 1175 1363 743 669 1290 1494 6...
result:
wrong answer 1st numbers differ - expected: '1495', found: '1494'
Test #5:
score: 10
Accepted
time: 68ms
memory: 144484kb
input:
40000 10000 20000 1 1 1 1 0 1 1 2 0 1 1 3 0 2 3 4 0 2 3 5 0 3 5 6 0 3 5 7 0 4 7 8 0 4 7 9 0 5 9 10 0 5 9 11 0 6 11 12 0 6 11 13 0 7 13 14 0 7 13 15 0 8 15 16 0 8 15 17 0 9 17 18 0 9 17 19 0 10 19 20 0 10 19 21 0 11 21 22 0 11 21 23 0 12 23 24 0 12 23 25 0 13 25 26 0 13 25 27 0 14 27 28 0 14 27 29 0 ...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 10000 numbers
Test #6:
score: 0
Wrong Answer
time: 91ms
memory: 159300kb
input:
40000 10000 20000 0 39999 2589 1050 1 39998 2589 983 0 39999 4308 9484 1 39998 4308 2423 0 39999 7924 4021 1 39998 7924 5520 0 39999 8340 2926 1 39998 8340 5694 0 39999 4146 8898 1 39998 4146 8588 0 39999 3838 2397 1 39998 3838 4545 0 39996 9766 4308 1 39995 9766 6570 0 39996 4764 8340 1 39995 4764 ...
output:
7631 6701 0 0 6900 7462 0 0 5585 6967 6147 7771 6362 6811 5606 0 5988 6557 6503 0 0 7771 6107 5701 6944 5932 5665 5480 6317 6201 6567 7771 5640 0 5777 5569 0 0 0 7201 7636 6952 5602 0 5602 5783 7358 5979 0 6135 6550 0 6600 0 7167 7630 0 5554 0 6026 5731 6705 5742 5991 0 6646 5606 7771 5590 7271 5667...
result:
wrong answer 1st numbers differ - expected: '7771', found: '7631'
Test #7:
score: 0
Wrong Answer
time: 724ms
memory: 398920kb
input:
1000000 30000 60000 0 999999 18959 18261 1 999998 18959 19279 0 999996 6700 18959 1 999995 6700 2151 0 999996 19778 18959 1 999995 19778 12268 0 999993 8449 6700 1 999992 8449 29787 0 999993 14350 6700 1 999992 14350 21702 0 999993 9759 6700 1 999992 9759 23907 0 999990 18560 9759 1 999989 18560 227...
output:
17408 21878 0 0 21135 0 19615 19856 23324 17427 18826 18453 20931 16788 16837 17019 19637 18963 18942 19588 19370 22602 22575 0 19410 19828 17437 21254 16710 0 16696 19398 16969 0 17452 18656 0 21115 23325 0 18748 22646 19205 17884 21834 20104 19659 19858 16921 17116 0 0 0 18265 0 19662 17162 17301 ...
result:
wrong answer 1st numbers differ - expected: '23311', found: '17408'
Test #8:
score: 10
Accepted
time: 1027ms
memory: 457280kb
input:
1000000 40000 80000 1 1 1 1 0 1 1 2 0 1 1 3 0 2 3 4 0 2 3 5 0 3 5 6 0 3 5 7 0 4 7 8 0 4 7 9 0 5 9 10 0 5 9 11 0 6 11 12 0 6 11 13 0 7 13 14 0 7 13 15 0 8 15 16 0 8 15 17 0 9 17 18 0 9 17 19 0 10 19 20 0 10 19 21 0 11 21 22 0 11 21 23 0 12 23 24 0 12 23 25 0 13 25 26 0 13 25 27 0 14 27 28 0 14 27 29 ...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 40000 numbers
Test #9:
score: 0
Time Limit Exceeded
input:
1000000 50000 100000 0 999999 18845 16698 1 999998 18845 7793 0 999999 30202 25942 1 999998 30202 39321 0 999999 10014 42307 1 999998 10014 16269 0 999999 5779 8262 1 999998 5779 48787 0 999996 38679 5779 1 999995 38679 17636 0 999996 33436 5779 1 999995 33436 7042 0 999996 11608 5779 1 999995 11608...
output:
27868 28547 28253 29870 28596 30742 28983 38876 36750 38876 32699 28667 35334 30325 28583 0 38875 29832 29700 28443 31055 35750 35532 29414 30361 0 29786 33796 0 0 38876 28335 27895 28616 28690 33552 29837 29956 29736 31823 38876 0 33097 37336 0 0 34818 28813 0 33489 32790 29412 33833 37528 29919 28...
result:
Test #10:
score: 0
Wrong Answer
time: 1625ms
memory: 498148kb
input:
1000000 50000 100000 0 1 1 41380 0 1 2 36609 0 1 3 25332 0 1 4 39173 0 1 5 37591 0 1 6 49880 0 1 7 33261 0 1 8 29353 0 1 9 33900 0 1 10 3182 0 1 11 38944 0 1 12 8610 0 1 13 4518 0 1 14 21812 0 1 15 325 0 1 16 47816 0 1 17 21494 0 1 18 14930 0 1 19 2669 0 1 20 46226 0 1 21 17334 0 1 22 1388 0 1 23 29...
output:
3415 22340 2116 15337 13537 3659 4690 6719 4438 24995 6026 22010 7497 680 24995 4558 15326 14207 18600 5613 13290 9901 24995 9797 24995 22447 18004 13544 102 24995 24995 19928 22140 2026 17600 11092 309 4993 10126 5682 24995 18617 939 815 18482 1632 4603 9930 6603 9712 4415 1149 13521 24654 8370 249...
result:
wrong answer 1st numbers differ - expected: '24998', found: '3415'