結果
問題 |
No.3025 Chocol∀te
|
ユーザー |
![]() |
提出日時 | 2025-02-17 15:38:56 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,929 bytes |
コンパイル時間 | 2,331 ms |
コンパイル使用メモリ | 205,124 KB |
実行使用メモリ | 39,864 KB |
最終ジャッジ日時 | 2025-02-17 15:39:29 |
合計ジャッジ時間 | 32,255 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 27 WA * 50 |
ソースコード
#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 if (g[u].size() == B + 1) { for (int j : g[u]) { if (j != v) { val[j] += a[u]; g_b[j].erase(u); } } } if (g[v].size() <= B) { val[u] -= a[v]; } else if (g[v].size() == B + 1) { for (int j : g[v]) { if (j != u) { val[j] += a[v]; g_b[j].erase(v); } } } g[u].erase(v); g[v].erase(u); } else { if (g[u].size() < B) { val[v] += a[u]; } else if (g[u].size() == B) { for (int j : g[u]) { val[j] -= a[u]; g_b[j].insert(u); } } if (g[v].size() < B) { val[u] += a[v]; } else if (g[v].size() == B) { for (int j : g[v]) { val[j] -= a[v]; g_b[j].insert(v); } } g[u].insert(v); g[v].insert(u); } } 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"; } } }