bzoj3991: [SDOI2015]寻宝游戏--DFS序+LCA+set动态维护
之前貌似在hdu还是poj上写过这道题。
#include<stdio.h> #include<string.h> #include<algorithm> #include<set> #define maxn 100010 #define INF 0x7fffffff using namespace std; struct node{ int to,cost,next; }e[maxn*]; int n,m,u,v,c,logn,tot,time,x; ],head[maxn],dep[maxn],id[maxn],pos[maxn]; ]; bool flag[maxn]; long long ans,t; set<int> st; inline void insert(int u, int v, int c){ e[++tot].to=v; e[tot].cost=c; e[tot].next=head[u]; head[u]=tot; } inline void dfs(int u, int f, int d, int c){ pos[u]=++time; id[time]=u; dep[u]=d; fa[u][]=f; dis[u][]=c; ; i<=logn; i++) fa[u][i]=fa[fa[u][i-]][i-]; ; i<=logn; i++) dis[u][i]=dis[u][i-]+dis[fa[u][i-]][i-]; ; i=e[i].next) ,e[i].cost); } inline long long lca(int u, int v){ ; if (dep[u]>dep[v]) swap(u,v); while (dep[u]<dep[v]){ ; i--) if (dep[u]<dep[fa[v][i]]){ sum+=dis[v][i]; v=fa[v][i]; } sum+=dis[v][]; v=fa[v][]; } if (u==v) return sum; ; i--) if (fa[u][i]!=fa[v][i]){ sum+=dis[u][i]+dis[v][i]; u=fa[u][i]; v=fa[v][i]; } sum+=dis[u][]+dis[v][]; return sum; } int main(){ scanf("%d%d", &n, &m); logn=; <<logn)<n) logn++; tot=-; memset(head,-,sizeof(head)); ; i<n; i++){ scanf("%d%d%d", &u, &v, &c); insert(u,v,c); insert(v,u,c); } time=; dfs(,,,); st.insert(-INF); st.insert(INF); while (m--){ scanf("%d", &x); if (!flag[x]){ flag[x]=; int l=*--st.lower_bound(pos[x]), r=*st.upper_bound(pos[x]); st.insert(pos[x]); if (l !=-INF) ans+=lca(id[l],x); if (r != INF) ans+=lca(x,id[r]); if (l!=-INF && r!=INF) ans-=lca(id[l],id[r]); } else{ flag[x]=; st.erase(pos[x]); int l=*--st.lower_bound(pos[x]), r=*st.upper_bound(pos[x]); if (l!=-INF) ans-=lca(id[l],x); if (r!= INF) ans-=lca(x,id[r]); if (l!=-INF && r!=INF) ans+=lca(id[l],id[r]); } ){ int l=*++st.lower_bound(-INF), r=*--st.lower_bound(INF); t=lca(id[l],id[r]); } printf("%lld\n", ans+t); } ; }
bzoj3991: [SDOI2015]寻宝游戏--DFS序+LCA+set动态维护的更多相关文章
- [BZOJ 3991][SDOI2015]寻宝游戏(dfs序)
题面 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路 ...
- [BZOJ3991][SDOI2015]寻宝游戏
[BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...
- CH#56C 异象石 和 BZOJ3991 [SDOI2015]寻宝游戏
异象石 CH Round #56 - 国庆节欢乐赛 描述 Adera是Microsoft应用商店中的一款解谜游戏. 异象石是进入Adera中异时空的引导物,在Adera的异时空中有一张地图.这张地图上 ...
- BZOJ3991 [SDOI2015]寻宝游戏 【dfs序 + lca + STL】
题目 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可以任意在地图的道路 ...
- luogu3320 寻宝游戏 (dfs序+倍增lca+set)
一定是从随便某个点开始,然后按着dfs序的顺序跑一圈是最好的 所以说,新加一个点x,就减少了dis(pre,next),增加了dis(pre,x),dis(x,nxt) 删掉一个点同理 这个可以用se ...
- [bzoj3991][SDOI2015]寻宝游戏_树链的并_倍增lca_平衡树set
寻宝游戏 bzoj-3991 SDOI-2015 题目大意:题目链接. 注释:略. 想法:我们发现如果给定了一些点有宝物的话那么答案就是树链的并. 树链的并的求法就是把所有点按照$dfs$序排序然后相 ...
- bzoj3991 [Sdoi2015]寻宝游戏 set动态维护虚树+树链求并
题目大意:支持多次操作,增加或删除一个关键点 动态维护虚树边权和*2 分析:可以用树链求并的方法,最后减去虚树的根到1距离 注意到树链求并是所有点到根距离-所有dfn序相邻两点的LCA到根距离 找df ...
- bzoj3991 [SDOI2015]寻宝游戏 树链的并
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3991 题解 貌似这个东西叫做树链的并,以前貌似写过一个类似的用来动态维护虚树. 大概就是最终的 ...
- 【dfs序】【set】bzoj3991 [Sdoi2015]寻宝游戏
在考试代码的基础上稍微改改就a了……当时为什么不稍微多想想…… 插入/删除一个新节点时就把其dfn插入set/从set中删除. 当前的答案就是dfn上相邻的两两节点的距离和,再加上首尾节点的距离. 比 ...
随机推荐
- ThinkPHP3.2 volist嵌套循环显示原理
php页面:$fatherList = $Document->where('pid=1')->select(); foreach($fatherList as $n=> ...
- MySQL导入sql脚本 导出数据库
导出数据库 不能停止服务 cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) mysqldump -u用户名 -p 数据库名 > 导出的文件名 ...
- 常用eclipse 快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...
- nefu558 bfs
Description AC小公主很喜欢设计迷宫,她设计的迷宫只有两个口,一个入口,一个出口.但小公主有时候很调皮,她会让挑战者走不出迷宫.现在给你AC小公主的迷宫请你判断挑战者能否成功从出口走出迷宫 ...
- WPF VlC 实现视频的播放(1)
WPF 使用VLC实现视频的播放:网上开源代码我复制了一份: https://github.com/someonehan/Vlc.DotNet 1. 准备阶段 (I) libvlc.dll 和 l ...
- JetS3t使用说明
http://blog.csdn.net/hitmediaman/article/details/6636402
- 后缀数组 POJ 2406 Power Strings
题目链接 题意:连续重复子串.给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的(L = S^R ), 求 R 的最大值. 分析:枚举长度,判断条件是能被总长度整除且LCP ( ...
- iOS instancetype or id ?
The id type simply says a method will return a reference to an object. It could be any object of any ...
- OAuth2授权页面state参数的设计
场景描述: 第三方应用:freeshare 账号系统:account freeshare点击登录,跳转到account页面进行授权. 具体例子可以参考我们的freeshare系统:http://fre ...
- unity 解析tmx 2
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; usin ...