This documentation is automatically generated by online-judge-tools/verification-helper
#ifndef call_from_test
#include <bits/stdc++.h>
using namespace std;
#define call_from_test
#include "base.cpp"
#undef call_from_test
#endif
// https://ei1333.hateblo.jp/entry/2018/05/29/011140
//BEGIN CUT HERE
template<typename Tp,typename Ep>
struct NodeBase{
using T = Tp;
using E = Ep;
NodeBase *l,*r,*p;
bool rev;
T val,dat;
E laz;
NodeBase(T val,E laz):
rev(0),val(val),dat(val),laz(laz){
l=r=p=nullptr;}
};
template<typename Np, size_t LIM>
struct Path : LinkCutTreeBase<Np, LIM, Path<Np, LIM>>{
using super = LinkCutTreeBase<Np, LIM, Path>;
using Node = Np;
using T = typename Node::T;
using E = typename Node::E;
using F = function<T(T, T)>;
using G = function<T(T, E)>;
using H = function<E(E, E)>;
using S = function<T(T)>;
F f;
G g;
H h;
S flip;
E ei;
Path(F f,G g,H h,S flip,E ei):
f(f),g(g),h(h),flip(flip),ei(ei){}
Path(F f,G g,H h,E ei):
Path(f,g,h,[](T a){return a;},ei){}
Node* create(T val){
return super::create(Node(val,ei));
}
inline void propagate(Node *t,E v){
t->laz=h(t->laz,v);
t->val=g(t->val,v);
t->dat=g(t->dat,v);
}
inline void toggle(Node *t){
swap(t->l,t->r);
t->dat=flip(t->dat);
t->rev^=1;
}
inline Node* eval(Node *t){
if(t->laz!=ei){
if(t->l) propagate(t->l,t->laz);
if(t->r) propagate(t->r,t->laz);
t->laz=ei;
}
if(t->rev){
if(t->l) toggle(t->l);
if(t->r) toggle(t->r);
t->rev=false;
}
return t;
}
inline void pushup(Node *t){
t->dat=t->val;
if(t->l) t->dat=f(t->l->dat,t->dat);
if(t->r) t->dat=f(t->dat,t->r->dat);
}
using super::splay;
inline Node* expose(Node *t){
Node *rp=nullptr;
for(Node *c=t;c;c=c->p){
splay(c);
c->r=rp;
pushup(c);
rp=c;
}
splay(t);
return rp;
}
T query(Node *t){
expose(t);
return t->dat;
}
void update(Node *t,E v){
expose(t);
propagate(t,v);
eval(t);
}
void set_val(Node *t,T v){
expose(t);
t->val=v;
eval(t);
}
};
//END CUT HERE
#ifndef call_from_test
// test dynamic tree
signed SPOJ_DYNACON1(){
cin.tie(0);
ios::sync_with_stdio(0);
int n,m;
cin>>n>>m;
using Node = NodeBase<int, int>;
constexpr size_t LIM = 1e6;
using LCT = Path<Node, LIM>;
auto f=[](int a,int b){return a+b;};
LCT lct(f,f,f,0);
for(int i=0;i<n;i++) lct.create(0);
for(int i=0;i<m;i++){
string s;
int a,b;
cin>>s>>a>>b;
a--;b--;
if(s=="add"s){
lct.evert(lct[b]);
lct.link(lct[a],lct[b]);
}
if(s=="rem"s){
auto v=lct.lca(lct[a],lct[b])==lct[a]?lct[b]:lct[a];
lct.cut(v);
}
if(s=="conn"s)
cout<<(lct.is_connected(lct[a],lct[b])?"YES\n":"NO\n");
}
cout<<flush;
return 0;
}
/*
verified on 2020/10/28
https://www.spoj.com/problems/DYNACON1/
*/
signed main(){
//SPOJ_DYNACON1();
return 0;
}
#endif
Traceback (most recent call last):
File "/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/onlinejudge_verify/languages/cplusplus.py", line 187, in bundle
bundler.update(path)
File "/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py", line 400, in update
raise BundleErrorAt(path, i + 1, "unable to process #include in #if / #ifdef / #ifndef other than include guards")
onlinejudge_verify.languages.cplusplus_bundle.BundleErrorAt: linkcuttree/path.cpp: line 6: unable to process #include in #if / #ifdef / #ifndef other than include guards