結果
問題 |
No.3025 Chocol∀te
|
ユーザー |
![]() |
提出日時 | 2025-02-17 15:58:10 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 724 ms / 2,000 ms |
コード長 | 2,009 bytes |
コンパイル時間 | 2,124 ms |
コンパイル使用メモリ | 204,568 KB |
実行使用メモリ | 40,796 KB |
最終ジャッジ日時 | 2025-02-17 15:58:40 |
合計ジャッジ時間 | 20,701 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 77 |
ソースコード
#include <bits/stdc++.h> using namespace std; void fast_io() { ios::sync_with_stdio(false); std::cin.tie(nullptr); } int main() { fast_io(); int n, m; cin >> n >> m; vector<set<int>> g(n); for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; x--, y--; g[x].insert(y); g[y].insert(x); } vector<long long> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } const int B = 300; vector<set<int>> g_b(n); vector<long long> val(n); for (int i = 0; i < n; i++) { for (int j : g[i]) { if (g[j].size() > B) { g_b[i].insert(j); } else { val[i] += a[j]; } } } int q; cin >> q; for (; q--;) { int com; cin >> com; if (com == 1) { int u, v; cin >> u >> v; u--, v--; if (g[u].count(v)) { if (g[u].size() <= B) { val[v] -= a[u]; } else { g_b[v].erase(u); } if (g[v].size() <= B) { val[u] -= a[v]; } else { g_b[u].erase(v); } g[u].erase(v); g[v].erase(u); if (g[u].size() == B) { for (int j : g[u]) { val[j] += a[u]; g_b[j].erase(u); } } if (g[v].size() == B) { for (int j : g[v]) { val[j] += a[v]; g_b[j].erase(v); } } } else { if (g[u].size() <= B) { val[v] += a[u]; } else { g_b[v].insert(u); } if (g[v].size() <= B) { val[u] += a[v]; } else { g_b[u].insert(v); } g[u].insert(v); g[v].insert(u); if (g[u].size() == B + 1) { for (int j : g[u]) { val[j] -= a[u]; g_b[j].insert(u); } } if (g[v].size() == B + 1) { for (int j : g[v]) { val[j] -= a[v]; g_b[j].insert(v); } } } } else if (com == 2) { int p; long long ap; cin >> p >> ap; p--; if (g[p].size() <= B) { for (int j : g[p]) { val[j] += ap - a[p]; } } a[p] = ap; } else if (com == 3) { int c; cin >> c; c--; long long ans = val[c]; for (int j : g_b[c]) { ans += a[j]; } cout << ans << "\n"; } } }