# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
159336 | 2019-10-22T11:15:42 Z | iefnah06 | Bridges (APIO19_bridges) | C++11 | 3000 ms | 14140 KB |
#include <bits/stdc++.h> using namespace std; // 把操作分块,每次回答每块内询问的答案 // 对于块前面的修改,把询问和这些修改按照边权降序排序,把前面的修改直接用并查集合并 // 对于块内的,暴力建图计算影响 const int MAXN = 2e5; int N, M; int S; int A[MAXN], B[MAXN], C[MAXN]; int Q; int T[MAXN], X[MAXN], Y[MAXN]; int ans[MAXN]; bool vis[MAXN]; struct dsu { int par[MAXN], sz[MAXN]; int getpar(int a) { return par[a] == -1 ? a : (par[a] = getpar(par[a])); } void merge(int a, int b) { a = getpar(a), b = getpar(b); if (a != b) { if (sz[a] > sz[b]) swap(a, b); sz[b] += sz[a]; par[a] = b; } } void reset() { fill(par + 1, par + N + 1, -1); fill(sz + 1, sz + N + 1, 1); } int size(int a) const { return sz[a]; } } conn; vector<int> adj[MAXN]; void add(int a, int b) { assert(1 <= a && a <= N); assert(1 <= b && b <= N); a = conn.getpar(a), b = conn.getpar(b); adj[a].push_back(b); adj[b].push_back(a); } int dfs(int cur) { vis[cur] = true; int res = conn.size(cur); for (int nxt : adj[cur]) { if (!vis[nxt]) { res += dfs(nxt); } } return res; } int main() { scanf("%d %d", &N, &M); S = max(1, int(sqrt(N * log2(N)))); for (int i = 0; i < M; i++) { scanf("%d %d %d", &A[i], &B[i], &C[i]); } scanf("%d", &Q); for (int i = 0; i < Q; i++) { scanf("%d %d %d", &T[i], &X[i], &Y[i]); if (T[i] == 1) X[i]--; } for (int st = 0; st < Q; st += S) { int ed = min(Q, st + S); vector<pair<int, int>> evts; for (int i = st; i < ed; i++) { if (T[i] == 1) { vis[X[i]] = true; } else { evts.emplace_back(Y[i], ~i); // < 0 } } vector<int> special; for (int i = 0; i < M; i++) { if (vis[i]) { special.push_back(i); } else { evts.emplace_back(C[i], i); // >= 0 } } for (int i = st; i < ed; i++) { if (T[i] == 1) { vis[X[i]] = false; } } sort(evts.begin(), evts.end(), greater<pair<int, int>>()); conn.reset(); for (const auto& ev : evts) { int w, i; tie(w, i) = ev; if (i >= 0) { conn.merge(A[i], B[i]); } else { i = ~i; for (int j = i - 1; j >= st; j--) { if (T[j] != 1 || vis[X[j]]) continue; vis[X[j]] = true; if (Y[j] >= w) { add(A[X[j]], B[X[j]]); } } for (const auto& j : special) { if (vis[j]) { vis[j] = false; } else if (C[j] >= w) { add(A[j], B[j]); } } ans[i] = dfs(conn.getpar(X[i])); // reset vis[conn.getpar(X[i])] = false; for (const auto& j : special) { int a = conn.getpar(A[j]); int b = conn.getpar(B[j]); adj[a].clear(), adj[b].clear(); vis[a] = false, vis[b] = false; } } } for (int i = st; i < ed; i++) { if (T[i] == 1) { C[X[i]] = Y[i]; } } } for (int i = 0; i < Q; i++) { if (T[i] == 2) { printf("%d\n", ans[i]); } } return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 5112 KB | Output is correct |
2 | Correct | 6 ms | 5112 KB | Output is correct |
3 | Correct | 42 ms | 5468 KB | Output is correct |
4 | Correct | 11 ms | 5496 KB | Output is correct |
5 | Correct | 20 ms | 5340 KB | Output is correct |
6 | Correct | 20 ms | 5496 KB | Output is correct |
7 | Correct | 16 ms | 5240 KB | Output is correct |
8 | Correct | 16 ms | 5368 KB | Output is correct |
9 | Correct | 18 ms | 5368 KB | Output is correct |
10 | Correct | 17 ms | 5368 KB | Output is correct |
11 | Correct | 16 ms | 5368 KB | Output is correct |
12 | Correct | 16 ms | 5368 KB | Output is correct |
13 | Correct | 19 ms | 5368 KB | Output is correct |
14 | Correct | 18 ms | 5368 KB | Output is correct |
15 | Correct | 18 ms | 5368 KB | Output is correct |
16 | Correct | 16 ms | 5240 KB | Output is correct |
17 | Correct | 16 ms | 5368 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2277 ms | 13156 KB | Output is correct |
2 | Correct | 2278 ms | 12840 KB | Output is correct |
3 | Correct | 2315 ms | 12692 KB | Output is correct |
4 | Correct | 2213 ms | 12996 KB | Output is correct |
5 | Correct | 2252 ms | 12896 KB | Output is correct |
6 | Execution timed out | 3032 ms | 11580 KB | Time limit exceeded |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1859 ms | 11736 KB | Output is correct |
2 | Correct | 795 ms | 9168 KB | Output is correct |
3 | Correct | 2059 ms | 11208 KB | Output is correct |
4 | Correct | 1818 ms | 11676 KB | Output is correct |
5 | Correct | 52 ms | 8184 KB | Output is correct |
6 | Correct | 1882 ms | 11440 KB | Output is correct |
7 | Correct | 1693 ms | 11616 KB | Output is correct |
8 | Correct | 1580 ms | 11692 KB | Output is correct |
9 | Correct | 1110 ms | 10816 KB | Output is correct |
10 | Correct | 1043 ms | 11012 KB | Output is correct |
11 | Correct | 1281 ms | 11304 KB | Output is correct |
12 | Correct | 1165 ms | 11360 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1898 ms | 14072 KB | Output is correct |
2 | Correct | 52 ms | 8184 KB | Output is correct |
3 | Correct | 2250 ms | 10360 KB | Output is correct |
4 | Correct | 1022 ms | 10428 KB | Output is correct |
5 | Correct | 1786 ms | 12584 KB | Output is correct |
6 | Correct | 1900 ms | 14064 KB | Output is correct |
7 | Correct | 1879 ms | 12600 KB | Output is correct |
8 | Correct | 968 ms | 11304 KB | Output is correct |
9 | Correct | 972 ms | 11516 KB | Output is correct |
10 | Correct | 968 ms | 11328 KB | Output is correct |
11 | Correct | 1563 ms | 13012 KB | Output is correct |
12 | Correct | 1550 ms | 13196 KB | Output is correct |
13 | Correct | 1524 ms | 12972 KB | Output is correct |
14 | Correct | 1520 ms | 12624 KB | Output is correct |
15 | Correct | 1633 ms | 12604 KB | Output is correct |
16 | Correct | 1951 ms | 14008 KB | Output is correct |
17 | Correct | 1977 ms | 13912 KB | Output is correct |
18 | Correct | 1950 ms | 14064 KB | Output is correct |
19 | Correct | 1953 ms | 14140 KB | Output is correct |
20 | Correct | 1735 ms | 13108 KB | Output is correct |
21 | Correct | 1715 ms | 13024 KB | Output is correct |
22 | Correct | 1907 ms | 13812 KB | Output is correct |
23 | Correct | 1804 ms | 12036 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 2277 ms | 13156 KB | Output is correct |
2 | Correct | 2278 ms | 12840 KB | Output is correct |
3 | Correct | 2315 ms | 12692 KB | Output is correct |
4 | Correct | 2213 ms | 12996 KB | Output is correct |
5 | Correct | 2252 ms | 12896 KB | Output is correct |
6 | Execution timed out | 3032 ms | 11580 KB | Time limit exceeded |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 5112 KB | Output is correct |
2 | Correct | 6 ms | 5112 KB | Output is correct |
3 | Correct | 42 ms | 5468 KB | Output is correct |
4 | Correct | 11 ms | 5496 KB | Output is correct |
5 | Correct | 20 ms | 5340 KB | Output is correct |
6 | Correct | 20 ms | 5496 KB | Output is correct |
7 | Correct | 16 ms | 5240 KB | Output is correct |
8 | Correct | 16 ms | 5368 KB | Output is correct |
9 | Correct | 18 ms | 5368 KB | Output is correct |
10 | Correct | 17 ms | 5368 KB | Output is correct |
11 | Correct | 16 ms | 5368 KB | Output is correct |
12 | Correct | 16 ms | 5368 KB | Output is correct |
13 | Correct | 19 ms | 5368 KB | Output is correct |
14 | Correct | 18 ms | 5368 KB | Output is correct |
15 | Correct | 18 ms | 5368 KB | Output is correct |
16 | Correct | 16 ms | 5240 KB | Output is correct |
17 | Correct | 16 ms | 5368 KB | Output is correct |
18 | Correct | 2277 ms | 13156 KB | Output is correct |
19 | Correct | 2278 ms | 12840 KB | Output is correct |
20 | Correct | 2315 ms | 12692 KB | Output is correct |
21 | Correct | 2213 ms | 12996 KB | Output is correct |
22 | Correct | 2252 ms | 12896 KB | Output is correct |
23 | Execution timed out | 3032 ms | 11580 KB | Time limit exceeded |
24 | Halted | 0 ms | 0 KB | - |