/* 3secにしたほうがいいかもしれない */ #include #include #include #include #include using namespace std; using namespace atcoder; #define ll long long const ll bit_length=10; typedef struct count{ vector val; count(){ val.resize(bit_length); } }Counter; ll restore(const Counter& a){ ll ret=0,c=1; for(int i=0;i& a){ for(Counter i:a){ os<& a){ for(ll i:a){ os<=0;i--){ os<>i)&1)ret.val.at(i)=1; else ret.val.at(i)=0; } return ret; } Counter op(const Counter a,const Counter b){ Counter ret; for(int i=0;i>d; vectordepth; int main(){ ll N,Q,a,b,T,x,y,q; cin>>N>>Q; vectorC(N); d.resize(N); depth.resize(N); for(int i=0;i>C.at(i); depth.at(i)=0; } for(int i=0;i>a>>b; d.at(a-1).push_back(b-1); d.at(b-1).push_back(a-1); } //要素の深さを計算する deque dq; vectorB(N,false); dq.push_back(0); while(!dq.empty()){ q=dq.back();dq.pop_back(); B.at(q)=true; for(ll i:d.at(q)){ if(B.at(i))continue; dq.push_back(i); depth.at(i)+=depth.at(q)+1; } } //子と親に分ける vector> parents(N); vector> children(N); for(int i=0;i> Nodes(N); vector A; vector check(N,false);//初めてきたか while(1){ //cerr<<"now:"<根 //cerr<<"break "< seg(A); ll r,l; Counter R,L,P; for(int i=0;i>T>>x>>y; if(T==1){ x--; l=Nodes.at(x).at(0); r=Nodes.at(x).at(1); //cerr<<"l:"<