結果
問題 | No.3025 Chocol∀te |
ユーザー |
![]() |
提出日時 | 2025-02-15 09:19:29 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,861 ms / 2,000 ms |
コード長 | 2,283 bytes |
コンパイル時間 | 3,356 ms |
コンパイル使用メモリ | 286,988 KB |
実行使用メモリ | 37,136 KB |
最終ジャッジ日時 | 2025-02-15 09:21:35 |
合計ジャッジ時間 | 102,788 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 77 |
ソースコード
#include<bits/stdc++.h>//#include <atcoder/all>using namespace std;//using namespace atcoder;#define all(v) v.begin(),v.end()using ll = long long;using ull = unsigned long long;using lll = __int128;using vll=vector<ll>;using vvll = vector<vector<ll>>;using P = pair<ll,ll>;using vp=vector<pair<ll, ll>>;//using mint=modint1000000007;//using mint=modint998244353;const ll INF=1ll<<60;ll mod10=1e9+7;ll mod99=998244353;const double PI = acos(-1);#define rep(i,n) for (ll i=0;i<n;++i)#define per(i,n) for(ll i=n-1;i>=0;--i)#define rep2(i,a,n) for (ll i=a;i<n;++i)#define per2(i,a,n) for (ll i=a;i>=n;--i)template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }bool solve(){ll N,M;cin>>N>>M;vector<unordered_set<ll>> ab(N);rep(i,M){ll x,y;cin>>x>>y;x--;y--;ab[x].insert(y);ab[y].insert(x);}vll A(N);rep(i,N) cin>>A[i];vll sum(N);rep(i,N) for(auto x:ab[i]) sum[i]+=A[x];ll Q;cin>>Q;ll B=500;vll P(Q);vll T(Q),U(Q),V(Q);rep(i,Q){cin>>T[i];if(T[i]==1) cin>>U[i]>>V[i],U[i]--,V[i]--;else if(T[i]==2) cin>>U[i]>>V[i],U[i]--;else cin>>U[i],U[i]--;}for(ll l=0;l<Q;l+=B){ll r=min(Q,l+B);unordered_set<ll> st;rep2(i,l,r) if(T[i]==3) st.insert(U[i]);rep2(i,l,r){if(T[i]==1){if(!ab[U[i]].count(V[i])){ab[U[i]].insert(V[i]);ab[V[i]].insert(U[i]);sum[U[i]]+=A[V[i]];sum[V[i]]+=A[U[i]];}else{ab[U[i]].erase(V[i]);ab[V[i]].erase(U[i]);sum[U[i]]-=A[V[i]];sum[V[i]]-=A[U[i]];}}else if(T[i]==2){for(auto x:st) if(ab[U[i]].count(x)) sum[x]+=V[i]-A[U[i]];A[U[i]]=V[i];}else{ll ans=sum[U[i]];cout<<ans<<"\n";}}rep(i,N) sum[i]=0;rep(i,N) for(auto x:ab[i]) sum[i]+=A[x];}return 0;}int main(){cin.tie(0);ios::sync_with_stdio(false);ll T=1;//cin>>T;rep(i,T) solve();}