比赛总结 发挥基本正常,T3 超级无敌尼玛比大失误
T1 总结 赛时总结 简单题,纯模拟即可
题目思路 模拟
题目代码 无
T2 总结 赛时总结 一眼题。小学生题目,模拟
题目思路 模拟
题目代码 无
T3 总结 赛时总结 赛时思路基本正确,结果为了计算正确的转弯次数多此一举,WA + TLE 0 分。
题目思路 记忆化搜索
题目代码 无
T4 总结 赛时总结 知道是前缀和,但是摆烂
题目思路 从 $k = 2$ 的情况扩展出来,变成了简单的小学题
题目代码 无
CSP - S 2022 题解 T3 星战(Galaxy) 题意 给出一张有 $n$ 个点,$m$ 条边的无向图。有如下几种操作。
摧毁一条边
修复一条边
摧毁一个点以及其所有的边
修复一个点以及它所有的边
思路 和哈希或异或哈希。处理每一个点的入度,与满图状态比较。
代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 #pragma GCC optimize(2) #pragma GCC optimize(3, "Ofast" , "inline" ) #include <bits/stdc++.h> using namespace std;typedef long long ll;typedef unsigned long long ull;typedef __int128 int128;namespace FastIO { char buf[1 << 20 ], *p1, *p2; #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2) ? EOF : *p1++) template <typename T> inline T read (T& x) { x = 0 ; int f = 1 ; char ch; while (!isdigit (ch = getchar ())) if (ch == '-' ) f = -1 ; while (isdigit (ch)) x = (x << 1 ) + (x << 3 ) + (ch ^ 48 ), ch = getchar (); x *= f; return x; } template <typename T, typename ... Args> inline void read (T& x, Args &...x_) { read (x); read (x_...); return ; } inline ll read () { ll x; read (x); return x; } inline void read (char *s) { scanf ("%s" , s + 1 ); } }; using namespace FastIO;const int N = 5e5 + 10 ;int n, m, Q;ull w[N], g[N], r[N]; ull tot, now; inline void Input () { read (n, m); for (int i = 1 ; i <= n; i++) { w[i] = (ull)rand (); tot += w[i]; } int u, v; for (int i = 1 ; i <= m; i++) { read (u, v); r[v] += w[u]; g[v] = r[v]; now += w[u]; } read (Q); } inline void Work () { int op, u, v; while (Q--) { read (op); if (op == 1 ) { read (u, v); r[v] -= w[u]; now -= w[u]; } else if (op == 2 ) { read (u); now -= r[u]; r[u] = 0 ; } else if (op == 3 ) { read (u, v); r[v] += w[u]; now += w[u]; } else { read (u); now += (g[u] - r[u]); r[u] = g[u]; } if (now == tot) { printf ("YES\n" ); } else { printf ("NO\n" ); } } } int main () { srand (time (0 )); int T = 1 ; while (T--) { Input (); Work (); } return 0 ; }