Submission #1073075

#TimeUsernameProblemLanguageResultExecution timeMemory
1073075rainboyTelephone Plans (CCO24_day2problem3)C11
25 / 25
1472 ms73108 KiB
#include <stdio.h> #define N 500000 #define Q 1500000 int tt[N + 1][2], pp[N + 1], sz[N + 1], sz_[N + 1]; char lz[N + 1]; int dir(int u) { return tt[pp[u]][0] == u ? 0 : 1; } int is_root(int u) { return tt[pp[u]][dir(u)] != u; } void put(int u) { if (u) { int tmp; tmp = tt[u][0], tt[u][0] = tt[u][1], tt[u][1] = tmp; lz[u] ^= 1; } } void pus(int u) { if (lz[u]) put(tt[u][0]), put(tt[u][1]), lz[u] = 0; } void pul(int u) { sz[u] = sz[tt[u][0]] + sz_[u] + sz[tt[u][1]]; } void attach(int u, int v, int d) { if (u) tt[u][d] = v, pul(u); if (v) pp[v] = u; } void rotate(int u) { int v, w, du, dv, isrt; v = pp[u], w = pp[v]; pus(w), pus(v), pus(u); du = dir(u), dv = dir(v), isrt = is_root(v); attach(v, tt[u][du ^ 1], du); attach(u, v, du ^ 1); if (isrt) pp[u] = w; else attach(w, u, dv); } void splay(int u) { while (!is_root(u)) { int v = pp[u]; if (!is_root(v)) pus(v), rotate(dir(u) == dir(v) ? v : u); rotate(u); } pus(u); } void expose(int u) { int v, w; for (v = u, w = 0; v; w = v, v = pp[v]) { splay(v); sz_[v] += sz[tt[v][1]], attach(v, w, 1), sz_[v] -= sz[w]; pul(v); } splay(u), put(u), pus(u); } long long m; void link(int u, int v) { expose(u), expose(v); m += (long long) sz[u] * sz[v]; sz_[u] += sz[tt[u][1]], attach(u, v, 1), pul(u); } void cut(int u, int v) { expose(u), expose(v); m -= (long long) sz_[v] * (sz[v] - sz_[v]); attach(v, 0, 1), pp[u] = 0; } int main() { static long long mm[Q + 1], ss[Q + 1]; int n, q, h, encrypted, i, j, d, t; long long i_, j_, d_, ans; scanf("%d%d%d", &encrypted, &n, &q); for (i = 1; i <= n; i++) sz_[i] = 1; mm[0] = 0; ans = 0; for (h = 1; h <= q; h++) { scanf("%d", &t); if (t == 1) { scanf("%lld%lld", &i_, &j_); if (!encrypted) i = i_, j = j_; else i = i_ ^ ans, j = j_ ^ ans; link(i, j); mm[h] = m, ss[h] = ss[h - 1]; } else if (t == 2) { scanf("%lld%lld", &i_, &j_); if (!encrypted) i = i_, j = j_; else i = i_ ^ ans, j = j_ ^ ans; cut(i, j); mm[h] = m, ss[h] = ss[h - 1] + mm[h - 1] - mm[h]; } else { scanf("%lld", &d_); if (!encrypted) d = d_; else d = d_ ^ ans; mm[h] = m, ss[h] = ss[h - 1]; printf("%lld\n", ans = mm[h] + ss[h] - ss[h - d]); } } return 0; }

Compilation message (stderr)

Main.c: In function 'main':
Main.c:96:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |  scanf("%d%d%d", &encrypted, &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.c:102:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |   scanf("%d", &t);
      |   ^~~~~~~~~~~~~~~
Main.c:104:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  104 |    scanf("%lld%lld", &i_, &j_);
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.c:112:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  112 |    scanf("%lld%lld", &i_, &j_);
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.c:120:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  120 |    scanf("%lld", &d_);
      |    ^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...