#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; struct unionfind{ vector par, sz; unionfind() {} unionfind(int n):par(n), sz(n, 1){ for(int i=0; isz[y]) swap(x, y); par[x]=y; sz[y]+=sz[x]; } bool same(int x, int y){ return find(x)==find(y); } int size(int x){ return sz[find(x)]; } }; int main() { int n, q; cin>>n>>q; int t, a, b; vector v[500050]; int s[500050]={}, x[500050]={}; for(int i=0; iv[b].size()) swap(a, b); for(auto j:v[a]){ x[j]+=(s[a]-s[b]); v[b].push_back(j); } v[a].clear(); uf.unite(a, b); }else if(t==2){ s[uf.find(a)]+=b; }else{ printf("%d\n", s[uf.find(a)]+x[a]); } } return 0; }