解析

大结论题…
实在是不知道这题和虚树有半毛钱关系吗…

引理
给出一个按照dfs排列的点集S={a1,a2…ak}
它们的极小联通子树的边权和的二倍等于∑dis(a1,a2)+dis(a2,a3)+...+dis(ak−1,ak)+dis(ak,a1)\sum dis(a_1,a_2)+dis(a_2,a_3)+...+dis(a_k-1,a_k)+dis(a_k,a_1)∑dis(a1​,a2​)+dis(a2​,a3​)+...+dis(ak​−1,ak​)+dis(ak​,a1​)

证明

按照本题的情景说吧,似乎更好理解一些
最优的路径是一个环,所以其实从哪个点开始都是可以的
所以我们其实就是决定一个先去哪里的问题
…不难发现按照dfs序走肯定是不劣的(或者说,就是最优的)
这什么垃圾证明

然后…本题就做完了…
写个lca板子,再维护个set指针找找前驱后继加加特判即可

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e5+100;
const int mod=998244353;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m;struct node{int to,nxt;ll w;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],w};fi[x]=cnt;return;
}int pl[N][18];
ll dep[N];
int siz[N],pos[N],tim;
void init(int x,int f){siz[x]=1;pos[x]=++tim;pl[x][0]=f;for(int k=1;pl[x][k-1];k++) pl[x][k]=pl[pl[x][k-1]][k-1];for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;dep[to]=dep[x]+p[i].w;init(to,x);siz[x]+=siz[to];}return;
}
inline int Lca(int x,int y){if(pos[x]<=pos[y]&&pos[y]<=pos[x]+siz[x]-1) return x;for(int k=17;k>=0;k--){int o=pl[x][k];if(!o||(pos[o]<=pos[y]&&pos[y]<=pos[o]+siz[o]-1)) continue;x=o;}return pl[x][0];
}
inline ll dis(int x,int y){int lca=Lca(x,y);return dep[x]+dep[y]-2*dep[lca];
}struct id{int x;
};
bool operator < (const id a,const id b){return pos[a.x]<pos[b.x];
}
bool operator > (const id a,const id b){return b<a;
}
set<id>s;
set<id>::iterator it1,it2;
int num;
ll ans(0);int main() {#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);
#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<n;i++){int x=read(),y=read(),w=read();addline(x,y,w);addline(y,x,w);}init(1,0);for(int t=1;t<=m;t++){int x=read();id o=(id){x};if(s.count(o)){s.erase(o),num--;if(num==0){printf("0\n");continue;}id fir=*s.begin();if(fir>o){it1=s.end();it1--;it2=s.begin();}else if(s.upper_bound(o)==s.end()){it1=s.end();it1--;it2=s.begin();}else{it1=it2=s.upper_bound(o);it1--;}int pre=(*it1).x,suf=(*it2).x;ans-=dis(pre,x)+dis(suf,x)-dis(pre,suf);}else{if(num==0){s.insert(o);num++;printf("0\n");continue;}id fir=(*s.begin());//printf("ok x=%d\n",fir.x);if(fir>o){it1=s.end();it1--;it2=s.begin();}else if(s.upper_bound(o)==s.end()){it1=s.end();it1--;it2=s.begin();}else{it1=it2=s.upper_bound(o);it1--;}int pre=(*it1).x,suf=(*it2).x;ans+=dis(pre,x)+dis(suf,x)-dis(pre,suf);//printf("pre=%d suf=%d\n",pre,suf);s.insert(o);num++;}printf("%lld\n",ans);}return 0;
}
/*
*/

P3320:寻宝游戏(生成树)相关推荐

  1. SDOI2015寻宝游戏 dfs序+set

    SDOI2015寻宝游戏 好像是一道虚树入门题? 虚树???不会不会我弱死了.. Solution: 关键点间的最小路径,就是在保证尽量少走重复路的前提下走出来的一条经过所有关键点的路径. 基于这个思 ...

  2. 河北工业大学c语言寻宝游戏,计算机技术基础(c语言)课程设计寻宝游戏.doc

    计算机技术基础(c语言)课程设计寻宝游戏 计算机技术基础(c语言)课程设计 寻宝游戏 #include #include #include #include #include #define ESC ...

  3. hdu 6289 寻宝游戏

    寻宝游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Sub ...

  4. 寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 - 物联网小游戏

    寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 作者简介 科科香,程序员 方向:IoT,方案集成,喜好各种新鲜东东 转载请注明出处 iBeacon简介 iBeacon(下面简称Beaco ...

  5. minecraft_使用MCDungeon将地牢,废墟和寻宝游戏添加到您的Minecraft世界中

    minecraft If you've grown tired of exploring the vanilla Minecraft world and the thrill of stumbling ...

  6. 许嵩续约太合音乐集团 携手开启《寻宝游戏》

    7月24日,许嵩<寻宝游戏>发布会暨续约仪式在北京顺利召开.在推出新专辑<寻宝游戏>之际,也宣布续约太合音乐集团,启动未来"无限"可能. 许嵩畅谈新专< ...

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

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

  8. 【SDOI2015】【BZOJ3991】寻宝游戏

    Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...

  9. 06:寻宝_第1集:寻宝游戏!

    06:寻宝 Let's kick things off with something a bit unusual: a virtual scavenger hunt. 让我们从一些不寻常的事情开始:虚 ...

最新文章

  1. Android与iOS对比
  2. Linux: TLB 查询流程
  3. euler‘s formula
  4. AAAI21最佳论文Runners Up!Transformer的归因探索!
  5. python3 获取file大小_Go语言 | 你还在这样获取文件的大小吗?
  6. 项目Wiki的选择和配置
  7. aws 部署python lambda_awslambda-为Lambda工具部署Python项目。-Philipp Gorczak Getting started Usage...
  8. 【OpenCV CUDA】OpenCV和Cuda结合编程
  9. 智能优化算法:混合蛙跳算法-附代码
  10. mac上数据库管理工具Navicat Premium 连接mySQL
  11. 利用百度智能云实现车牌号识别
  12. solidworks钣金件设计术语creo/ug适用
  13. 惠普打印机USB安装成功,但断开USB重新连接时显示脱机无法打印问题(上一版本的驱动程序还在内存中,因此无法加载驱动程序)
  14. 计算机量子化学计算焓,本科毕业论文--量子化学计算的基本原理及应用.doc
  15. GEE(python)雨天Gini指数
  16. Transformer + RL:是强化学习魔高一尺,还是 Transformer 道高一丈? (1)
  17. H5DS简单又强大的H5编辑器
  18. 一份golang令牌桶攻略(juju/ratelimit)
  19. 从光驱型号获得光驱详细配置参数信息
  20. SAP 远程连接登录配置(SAP Router)

热门文章

  1. mysql 5.5.46_MySQL 5.5.46源码安装
  2. kafka 怎么样连接图形化界面_图形化编程有多简单,点亮LED不到一分钟
  3. html怎么做交互留言,简单html与servlet交互
  4. io流图解 java_详细讲解JAVA中的IO流
  5. eclipse访问别人 mysql数据库_eclipse访问mysql数据库!
  6. python3怎么安装gmpy2_python2/3 模块gmpy2在linux下安装
  7. mybatis collection标签_一对多的关系,在MyBatis中如何映射?
  8. css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
  9. mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求
  10. c++STL的反向迭代器