結果
問題 | 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";}}}