1 条题解

  • 0
    @ 2023-10-24 0:08:48
    #include <bits/stdc++.h>
    using namespace std;
    #define int unsigned long long
    
    const int N = 500010;
    
    int n, m, q, a[N], in[N], out[N], sum[N], tot, now, nv[N];
    
    signed main() {
        freopen("galaxy.in", "r", stdin);
        freopen("galaxy.out", "w", stdout);
        scanf("%llu%llu", &n, &m);
        for (int i = 1; i <= n; ++i) {
            a[i] = rand();
            tot += a[i];
        }
        for (int i = 1; i <= m; ++ i) {
            scanf("%llu%llu", in + i, out + i);
            sum[out[i]] += a[in[i]];
            now += a[in[i]];
        }
        for (int i = 1; i <= n; ++ i) nv[i] = sum[i];
        scanf("%llu", &q);
        while (q--) {
            int t;
            scanf("%llu", &t);
            if (t == 1) {
                int u, v;
                scanf("%llu%llu", &u, &v);
                nv[v] -= a[u];
                now -= a[u];
            } else if (t == 2) {
                int u;
                scanf("%lld", &u);
                now -= nv[u];
                nv[u] = 0;
            } else if (t == 3) {
                int u, v;
                scanf("%llu%llu", &u, &v);
                nv[v] += a[u];
                now += a[u];
            } else {
                int u;
                scanf("%lld", &u);
                now += sum[u] - nv[u];
                nv[u] = sum[u];
            }
            if (now == tot) puts("YES");
            else puts("NO");
        }
        return 0;
    }
    
    • 1

    信息

    ID
    261
    时间
    2000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2273
    已通过
    53
    上传者