codevs p4633
来源:互联网 发布:修车的软件app 编辑:程序博客网 时间:2024/06/04 09:22
模板题
#include <bits/stdc++.h>#define lc (o<<1)#define rc (lc|1)#define m ((l+r)>>1)using namespace std;const int MAXN = 100000 + 5;int lazy[MAXN<<2],sum[MAXN<<2];int dep[MAXN],fa[MAXN],siz[MAXN],son[MAXN],top[MAXN],pos[MAXN],sz=0,ec=0;int to[MAXN<<1],next[MAXN<<1],fst[MAXN];int n;int in(){int c=getchar(),x=0;while(!isdigit(c))c=getchar();while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x;}inline void up(int o,int l,int r){sum[o]=0;if(l<r)sum[o]=sum[lc]+sum[rc];if(lazy[o])sum[o]+=lazy[o]*(r-l+1);}void update(int o,int l,int r,int cl,int cr,int cv){if(cl<=l && r<=cr)lazy[o]+=cv;else{if(cl<=m)update(lc,l,m,cl,cr,cv);if(m+1<=cr)update(rc,m+1,r,cl,cr,cv);}up(o,l,r);}int query(int o,int l,int r,int ql,int qr,int add){int ans=0;if(ql<=l && r<=qr)return sum[o]+add*(r-l+1);if(ql<=m)ans+=query(lc,l,m,ql,qr,add+lazy[o]);if(m+1<=qr)ans+=query(rc,m+1,r,ql,qr,add+lazy[o]);return ans;}void dfs1(int u,int f,int d){dep[u]=d;fa[u]=f;siz[u]=1;son[u]=0;for(int i=fst[u];i;i=next[i]){int v=to[i];if(v==f)continue;dfs1(v,u,d+1);siz[u]+=siz[v];if(siz[son[u]]<siz[v])son[u]=v;}}void dfs2(int u,int tp){top[u]=tp;pos[u]=++sz;if(son[u])dfs2(son[u],tp);for(int i=fst[u];i;i=next[i]){int v=to[i];if(v!=fa[u] && v!=son[u])dfs2(v,v);}}int add(int u,int v){to[++ec]=v;next[ec]=fst[u];fst[u]=ec;}int ask(int u,int v){int ans=0;while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]])swap(u,v);ans+=query(1,1,n,pos[top[u]],pos[u],0);u=fa[top[u]];}if(dep[u]>dep[v])swap(u,v);ans+=query(1,1,n,pos[u],pos[v],0);return ans;}void modify(int u,int v){while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]])swap(u,v);update(1,1,n,pos[top[u]],pos[u],1);u=fa[top[u]];}if(dep[u]>dep[v])swap(u,v);update(1,1,n,pos[u],pos[v],1);}int main(){n=in();for(int i=1;i<=n-1;i++){int x=in(),y=in();add(x,y);add(y,x);}dfs1(1,0,1);dfs2(1,1);int q=in();for(int i=1;i<=q;i++){int a=in(),b=in(),c=in();if(a==1)modify(b,c);else {int ans=ask(b,c);printf("%d\n",ans);}}return 0;}
0 0
- codevs p4633
- Codevs
- codevs 1060
- [CodeVS]3304
- codevs 4248
- Codevs 苹果树
- Codevs 挂缀
- Codevs 加密算法
- CodeVs 1011
- codevs 买票
- codevs 1257
- CodeVs 1009
- codevs 1011
- codevs 1038
- codevs 1044
- codevs 1086
- codevs 1115
- codevs 1220
- SAP NetWeaver 7.4 XXE Injection
- intellij ide快捷键
- (Caffe)基本类InternalThread(三)
- Android从零开始之工欲善其事必先利其器--环境搭建与配置
- 【Android 】Application的使用及其生命周期
- codevs p4633
- JDK升级到1.7后 com.sun.image.codec.jpeg JPEGImageEncoder不存在
- (Caffe)基本类DataReader、QueuePair、Body(四)
- 获取手机通讯录
- DOM---点亮星
- EnforceLearning-被动强化学习
- Parcelable序列化实现方法
- UPGMA算法 树的hierarchy回归
- 跟踪程序执行流程,在某个模块的入口