結果
問題 | No.3025 Chocol∀te |
ユーザー |
![]() |
提出日時 | 2025-02-14 23:07:54 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,245 ms / 2,000 ms |
コード長 | 3,510 bytes |
コンパイル時間 | 3,599 ms |
コンパイル使用メモリ | 291,688 KB |
実行使用メモリ | 35,956 KB |
最終ジャッジ日時 | 2025-02-14 23:10:11 |
合計ジャッジ時間 | 44,091 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 77 |
ソースコード
#include<bits/stdc++.h>using namespace std;#pragma GCC target("avx2")#pragma GCC optimize("O3")#pragma GCC optimize("unroll-loops")#define rep(i,a,b) for(int i=a;i<b;i++)#define rrep(i,a,b) for(int i=a;i>=b;i--)#define fore(i,a) for(auto &i:a)#define all(a) begin(a),end(a)#define allr(a) rbegin(a),rend(a)#define pb push_back#define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end())using ll =long long;using pii = pair<int,int>;using pll = pair<ll,ll>;using vi= vector<int>;using vll =vector<ll>;using vvi = vector<vector<int>>;inline bool ingrid(int a,int b,int h,int w){return 0<=a&&a<h&&0<=b&&b<w;}template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }int popcount(int t){return __builtin_popcount(t);}int popcount(ll t){return __builtin_popcountll(t);}struct Edge{int from,to;ll cost;int idx;Edge()=default;Edge(int from,int to,ll cost=1,int idx=-1):from(from),to(to),cost(cost),idx(idx){}operator int() const {return to;}};constexpr pii dx4[4]={{0,1},{0,-1},{1,0},{-1,0}};constexpr pii dx[100]={};#define endl '\n'#include<unordered_set>int main(){cin.tie(nullptr);ios::sync_with_stdio(false);int n,m;cin>>n>>m;vi x,y;x.resize(m);y.resize(m);vector<unordered_set<int>> g(n);rep(i,0,m){cin>>x[i]>>y[i];x[i]--;y[i]--;g[x[i]].insert(y[i]);g[y[i]].insert(x[i]);}vll A(n);rep(i,0,n){cin>>A[i];}const int B=400;const int MAXN=100000;int q;cin>>q;int cur[B];//今見ている頂点bool seen[MAXN];memset(seen,false,sizeof(seen));vll ans(n);//差分更新しながら使うconst int MAXQ=100000;int x1[MAXQ],x2[MAXQ],x3[MAXQ];rep(i,0,q){int t;cin>>t;if(t==1){int u,v;cin>>u>>v;u--;v--;x1[i]=1;x2[i]=u;x3[i]=v;}else if(t==2){int p;ll a;cin>>p>>a;p--;x1[i]=2;x2[i]=p;x3[i]=a;}else{int c;int tmp=-1;cin>>c;c--;x1[i]=3;x2[i]=c;x3[i]=-1;}}int sz=0;rep(i,0,q){if(i%B==0){//初期化rep(j,0,sz){seen[cur[j]]=0;}int idx=0;rep(j,i,min(q,i+B)){if(x1[j]==3&&seen[x2[j]]==0){cur[idx++]=x2[j];seen[x2[j]]=1;}}sz=idx;rep(_j,0,sz){int j=cur[_j];ans[j]=0;fore(k,g[j]){ans[j]+=A[k];}}}int t=x1[i],u=x2[i],v=x3[i];if(t==1){if(g[u].find(v)!=g[u].end()){g[u].erase(v);g[v].erase(u);ans[u]-=A[v];ans[v]-=A[u];}else{g[u].insert(v);g[v].insert(u);ans[u]+=A[v];ans[v]+=A[u];}}else if(t==2){int p=u;ll a=v;rep(_j,0,sz){int j=cur[_j];if(g[p].find(j)!=g[u].end()){ans[j]-=A[p];ans[j]+=v;}}A[p]=v;}else{cout<<ans[u]<<endl;}}return 0;}/**/