思路:
set按照dfn排序
两点之间的距离可以O(logn)算出来
加一个点-> now
ans+=dis(pre,now)+dis(now,next)-dis(pre-next);
删一个点同理
最后加上dis(begin,end)即可

//By SiriusRen
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200050;
typedef long long ll;
int first[N],next[N],v[N],w[N],tot,cnt,rev[N];
int n,m,xx,yy,zz,dfn[N],deep[N],fa[N/2][20];
ll ans,wei[N],temp;
struct cmp{bool operator()(int x,int y){return dfn[x]<dfn[y];}};
set<int,cmp>s;set<int,cmp>::iterator it,itpre,itnext;
void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void dfs(int x){dfn[x]=++cnt;for(int i=first[x];~i;i=next[i])if(v[i]!=fa[x][0])deep[v[i]]=deep[x]+1,wei[v[i]]=wei[x]+w[i],fa[v[i]][0]=x,dfs(v[i]);
}
int lca(int x,int y){if(deep[x]<deep[y])swap(x,y);for(int i=19;i>=0;i--)if(deep[x]-(1<<i)>=deep[y])x=fa[x][i];if(x==y)return x;for(int i=19;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];return fa[x][0];
}
ll dis(int x,int y){return wei[x]+wei[y]-2*wei[lca(x,y)];}
int main(){memset(first,-1,sizeof(first));scanf("%d%d",&n,&m);for(int i=1;i<n;i++){scanf("%d%d%d",&xx,&yy,&zz);add(xx,yy,zz),add(yy,xx,zz);}dfs(1),deep[1]=1;for(int j=1;j<=19;j++)for(int i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1];while(m--){scanf("%d",&xx);rev[xx]^=1;if(rev[xx]){s.insert(xx),it=s.lower_bound(xx);itnext=++it,--it;if(it!=s.begin())itpre=--it,++it,ans+=dis(*itpre,*it);if(itnext!=s.end())ans+=dis(*itnext,*it);if(it!=s.begin()&&itnext!=s.end())ans-=dis(*itpre,*itnext);}else{it=s.lower_bound(xx);itnext=++it,--it;if(it!=s.begin())itpre=--it,++it,ans-=dis(*itpre,*it);if(itnext!=s.end())ans-=dis(*itnext,*it);if(it!=s.begin()&&itnext!=s.end())ans+=dis(*itpre,*itnext);s.erase(it);}it=s.end();if(s.size()>1)temp=dis(*s.begin(),*(--it));else temp=0;printf("%lld\n",ans+temp);}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532016.html

BZOJ 3991 set维护dfs序相关推荐

  1. 【BZOJ 3729】3729: Gty的游戏 (Splay维护dfs序+博弈)

    未经博主同意不得转载 3729: Gty的游戏 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 448  Solved: 150 Descriptio ...

  2. BZOJ2690: 字符串游戏(平衡树动态维护Dfs序)

    Description 给定N个仅有a~z组成的字符串ai,每个字符串都有一个权值vi,有M次操作,操作分三种: Cv x v':把第x个字符串的权值修改为v' Cs x a':把第x个字符串修改成a ...

  3. bzoj3786星系探索(splay维护dfs序)

    Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅有一个依赖星球.主星球 ...

  4. bzoj 2434 [Noi2011]阿狸的打字机(AC自动机+fail树+dfs序+树状数组)

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 3521  Solved: 1913 [Submit][S ...

  5. 【BZOJ 3991】 [SDOI2015]寻宝游戏

    3991: [SDOI2015]寻宝游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 251 Solved: 137 [Submit][Status ...

  6. 牛客多校4 - Ancient Distance(树上倍增+dfs序+线段树)

    题目链接:点击查看 题目大意:给出一棵 n 个节点且以点 1 为根节点的的树,现在给出一个 k ,需要在树上选择 k 个关键点,使得 n 个点到达根节点的路径上,出现的最近的关键点的距离的最大值最小, ...

  7. 【BZOJ3252】攻略 DFS序+线段树(模拟费用流)

    [BZOJ3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...

  8. Jittery Roads Gym - 100889J (虚树 + DP + dfs 序, + 线段树)

    每次给一个点集, 求每个点到其他所有点的最大距离: 会修改边权; 修改边权之后, 我们可以用 dfs 序 + 线段树维护 当前点到根节点的距离. 还可以用树状数组 + 差分思想 维护. { dfs 序 ...

  9. 线段树 ---- D. Power Tree(离线dfs序+线段树维护树上多条路径和的技巧)

    题目链接 题目大意: 一开始给你只有一个点111的树,有qqq次询问.每次询问有两种操作 1pv1\;p\;v1pv 就是把最小的没加入的点,加入这个树,它的父亲是ppp,权值是vvv 2u2\;u2 ...

  10. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

最新文章

  1. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表
  2. EXCEL IFS函数的使用
  3. 08 域控 架构主机 转移_win2000域控迁移至win2008
  4. JSON字符串,JSON对象,JSON数组,实体类转换
  5. VOT目标路径可视化
  6. 对于STM32的ADC芯片的思考
  7. Kyan网络监控设备账号密码泄露漏洞
  8. PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)
  9. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件(经经经经经典)
  10. html设置文本域的,HTML-文本域属性设置
  11. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法
  12. 通过Python爬虫按关键词抓取相关的新闻
  13. 小度的进攻,智能音箱的“二战”
  14. [Java]Maven学习笔记(尚硅谷2022)
  15. Android:从零开始打造自己的深度链接库(一):ARouter简介
  16. acmore|acmore.cc1211采油区域1212会议中心1213抢掠计划APIO2009
  17. C#进行Visio二次开发之Web查看Visio图纸
  18. 计算机专业研究生如何看待计算机期刊论文
  19. 考虑不同充电需求的电动汽车协调充电调度方法 提出了一种电动汽车(EV)的协调充电调度方法
  20. android openal播放器,Android OpenAL 录音参数不正确

热门文章

  1. VS Code Css格式化插件
  2. 展望未来城市,万物皆可运营
  3. 《北京市工作居住证》办理攻略
  4. 混频器的噪声来源与抑制方法
  5. 淘宝客服外包哪家最好
  6. 跟Nature学SCI图片高级配色
  7. 学校计算机房使用登记制度,瑶风中学计算机房管理制度
  8. linux shell脚本查找局域网内所有已连接的设备ip
  9. 数据库实战入门——SQL全方位学习
  10. linux服务器发异常包,如何排查Linux服务器上的恶意发包行为