BZOJ4223 : Tourists】的更多相关文章

将位置划分成$O(m)$段区间,每段最早被阻挡的时间可以用堆维护. 那么每段区间对询问的贡献独立,扫描线处理即可. 时间复杂度$O(m\log m)$. #include<cstdio> #include<algorithm> #include<queue> using namespace std; typedef pair<int,int>P; const int N=100010; int n,m,i,x,y,z,cnt,tot,sum,k;bool d…
E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output :standard output There are n cities in Cyberland, numbered from 1 to n, connected by m bidirectional roads. The j-th road connects city aj an…
Tourists 时间限制: 5 Sec  内存限制: 64 MB 题目描述 In Tree City, there are n tourist attractions uniquely labeled 1 to n. The attractions are connected by a set of n − 1 bidirectional roads in such a way that a tourist can get from any attraction to any other us…
E. Tourists 题意: 无向连通图 C a w: 表示 a 城市的纪念品售价变成 w. A a b: 表示有一个游客要从 a 城市到 b 城市,你要回答在所有他的旅行路径中最低售价的最低可能值. \(1≤n,m,q≤10^5,1≤w_i\le10^9\) 显然一个点双连通分量中想去任何点都是可以的. 那么bcc缩点,树剖一下就好了? 割点可以存在于多个bcc! 所以把割点单独拿出来,向每个bcc连边 修改割点的权值怎么办? 每个割点的信息合并到父亲bcc里,查询的时候lca为bcc那么额…
[CF487E]Tourists(圆方树) 题面 UOJ 题解 首先我们不考虑修改,再来想想这道题目. 我们既然要求的是最小值,那么,在经过一个点双的时候,走的一定是具有较小权值的那一侧. 所以说,我们可以让所有的方点表示它所在的点双的最小权值, 这样子只需要对于圆方树树链剖分之后维护链的最小值就行了. 好的,回归带修改,无非是要动态的维护一下方点的最小权值了. 你问我怎么动态维护若干个值的最小值?搞个\(multiset\)不就好了吗? 但是,现在问题又来了,如果每次修改一个点的权值(这个点当…
Overseas tourists continued to shun Beijing through 2013. shun:避开,避免,回避 Amid rising pollution and a strengthening yuan, the capital city saw its tourist numbers drop to 4.20 million visits from January to November from 5.01 million visits in 2012, ac…
Virgin Galactic says its spacecraft designed to launch tourists into space completed an important test flight on Thursday.The rocket ship, called SpaceShipTwo VSS Unity, climbed more than 82 kilometers during the flight above California’s Mojave Dese…
UOJ #30. [CF Round #278] Tourists 题目大意 : 有一张 \(n\) 个点, \(m\) 条边的无向图,每一个点有一个点权 \(a_i\) ,你需要支持两种操作,第一种操作修改一个点的点权,第二种操作给出 \(u, v\),求一个点 \(x\) ,存在一条 \(u-x-v\) 不经过重复点的路径且 \(a_x\) 最小 \(1 \leq n,m \leq 10^5\) 解题思路 : ​ 考虑如果 \(u-x\) 和 \(x-v\) 经过了同一个割点,那么一定不合法…
[UOJ30]/[CF487E]Tourists 题目大意: 一个\(n(n\le10^5)\)个点\(m(m\le10^5)\)条边的无向图,每个点有点权.\(q(q\le10^5)\)次操作,操作包含以下两种: 修改一个点的点权. 找到一条连接\((u,v)\)的简单路径,使得最小权值最小.求最小权值. 思路: 缩点后建圆方树,用树链剖分维护权值.发现修改圆点后可能修改\(O(n)\)个方点. 考虑更改方点的含义,让方点只维护子结点,因此修改一个圆点只需要修改它的父亲方点(利用BFS序+线段…
CF487E Tourists 一般图,带修求所有简单路径代价. 简单路径,不能经过同一个点两次,那么每个V-DCC出去就不能再回来了. 所以可以圆方树,然后方点维护一下V-DCC内的最小值. 那么,从任意一个割点进入这个DCC,必然可以绕一圈再从另一个割点出去. 所以,路径上的最小值,就是圆方树路径上的最小值.方点的最小值就是在这个DCC中走一走得到的. 树链剖分+线段树维护路径 用堆维护方点四周的圆点的最小值.然后更新. 一个问题是: 更新一个割点圆点,会影响到四周所有的方点.暴力更新,菊花…
终于学了圆方树啦~\(≧▽≦)/~ 感谢y_immortal学长的博客和帮助 把他的博客挂在这里~ 点我传送到巨佬的博客QwQ! 首先我们来介绍一下圆方树能干什么呢qwq 1.将图上问题简化到树上问题 2.一般是路径并 3.资磁修改! 然后我们就可以步入正题来学习圆方树啦~ ——超良心圆方树教程!—— 这里是一个前缀芝士清单! 1.Tarjan求点双连通分量 2.树链剖分 如果你大体知道这两个东西在干什么 那你看接下来的教程就会非常熟练[大雾 一.圆方树的构造 原图中的点称为原点 新建的点称为方…
CF487E Tourists(圆方树+树链剖分+multiset/可删堆) Luogu 给出一个带点权的无向图,两种操作: 1.修改某点点权. 2.询问x到y之间简单路径能走过的点的最小点权. 题解时间 总感觉是将一堆水题拼出来的丑陋产物(划去) 毫无疑问看题直接搞上圆方树. 用可删堆或者multiset维护方点的权值. 查询直接树剖搞. 但这样会发现修改时间复杂度无法保证. 所以改成每个方点只记录子节点的权值. 当lca为方点时答案计算一下它上面的圆点. $ O(nlog^{2}n) $ #…
传送门 好毒瘤的一道题QAQ,搞了好几好几天. UOJ上卡在了53个点,CF上过了,懒得优化常数了 刚看时一眼Tarjan搞个强连通分量然后缩点树链剖分xjb搞搞就行了,然后写完了,然后WA了QAQ. 思考了一会把代码全删了,加了个mulutiset重写一遍,然后又是各种WA. 然后去看了POPOQQQ大爷的代码.原来把无向图缩成一个树用的是点双联通分量,搞不清图论的概念只能自扇脸.. 然后去研究了点双联通分量,搞了一道题,顺便给Trajn搞了个小总结. 这道题其实就是缩点然后剖剖剖.但是我的姿…
1.感谢taorunz老师 2.题目大意:就是给个带权无向图,然后有两种操作, 1是修改某个点的权值 2是询问,询问一个值,就是u到v之间经过点权的最小值(不可以经过重复的点) 操作数,点数,边数都不超过100000 3.分析:首先看这道题,就感觉用双联通+树剖搞一搞可以过,可是怎么搞呢 首先双联通是必然的了,可是正常的缩点+树剖会爆零随便试试就知道了 然后我们需要不正常的缩点,我们在正常的缩点后加入割点,割点向它所属的一切双联通分量连边 这样,我们就不怕询问的u和v中有割点了,可是虽然询问是l…
如果不是uoj上有的话(听说这是China Round),我有可能就错过这道题目了(这是我有史以来为oi写的最长的代码,用了我一天TAT!). 题目 传送门. 一个连通无向图,点上有权,支持两种操作: 修改某点的权值 询问点\(x\)到\(y\)的经过的最小的点(同一个点不能重复经过) 算法 这题想起来是不难的: 容易想到做一个强连通分量,每个分量里的点可以互相到达. 这时会有一个猜想:在一个分量里,是不是任意指定三点\(a,b,c\),都有一条合法路径从\(a\)到\(b\)途中经过\(c\)…
我写这篇博客的原因 证明我也是学过圆方树的 顺便存存代码 前置技能 双联通分量:点双 然后就没辣 圆方树 建立 新建一个图 定义原图中的所有点为圆点 对于每个点双联通分量(只有两个点的也算) 建立一个方点,向所有的点双内的点连边 性质 一定是个森林 每个点双有唯一的方点 圆点方点相间分布,相同点不相邻 等等 例子 1 题面 求可以出现在两点之间的简单路路径上的点的最大权值,不带修改 分析 考虑用圆方树来解决 设圆点权值为本身,方点权值为点双中的最大权值 那么就是树上的路径最大权值 例子 2 还是…
Description Cyberland 有 n 座城市,编号从 1 到 n,有 m 条双向道路连接这些城市.第 j 条路连接城市 aj 和 bj.每天,都有成千上万的游客来到 Cyberland 游玩. 在每一个城市,都有纪念品售卖,第 i 个城市售价为 wi.这个售价有时会变动. 每一个游客的游览路径都有固定起始城市和终止城市,且不会经过重复的城市. 他们会在路径上的城市中,售价最低的那个城市购买纪念品. 你能求出每一个游客在所有合法的路径中能购买的最低售价是多少吗? 你要处理 q个操作:…
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一张无向图,有点权,要支持单点修改点权和询问从一个点到另一个点不重复经过节点的路径上点权最小值的最小值. n,m<=10^5 考虑求出图的点双连通分量,然后每个点向所有包含他的点双连边,这样我们可以得到一棵树. 询问就变成了询问与树上两点间路径上的点相邻的点中权值的最小值. 我们考虑对每个点双开一个堆,把所有儿子的信息扔进去.这样但点修改只需要修改它父亲那个点双就行了. 然后用树剖+线段树来支持查询即可.注意特判lca的父亲节点. 复…
求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权,方点用$ multiset$存连通分量的点权集合,权值为集合中的最小值 每次询问就变成求圆方树中一条树链的最小值,可以用树链剖分维护 考虑修改一个圆点的点权 对于这个圆点直接修改,但如果暴力修改周围方点,复杂度明显爆炸 我们修改一下方点的定义,改为这个连通分量中除了自己父亲圆点外其他圆点的最小权值…
洛谷 Codeforces 思路 首先要莫名其妙地想到圆方树. 建起圆方树后,令方点的权值是双联通分量中的最小值,那么\((u,v)\)的答案就是路径\((u,v)\)上的最小值. 然而这题还有修改,可以在每个方点维护一个\(multiset\)以支持. 但如果每次修改都暴力修改相邻的方点权值显然要挂,如何优化? 可以令方点的权值不包括自己的父亲,那么修改圆点时只需要修改自己的父亲即可. 查询时如果\(lca\)是方点那么还要与方点的父亲取\(\min\). 比较码农. 代码 #include<…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ30.html 题目传送门 - UOJ#30 题意 uoj写的很简洁.清晰,这里就不抄一遍了. 题解 首先建出圆方树.接下来,我们称"圆点"为原来有的点,"方点"为新增的点. 然后先只考虑在线询问如何做. ——把方点的值设置成所有与他连边的圆点的权值的最小值,直接在圆方树上树链剖分再套个线段树支持一下区间询问即可. 然后会发现这样做支持不了修改操作. ——直接来个菊花图不断修…
传送门 注意到我们需要求的是两点之间所有简单路径中最小值的最小值,那么对于一个点双联通分量来说,如果要经过它,则一定会经过这个点双联通分量里权值最小的点 注意:这里不能缩边双联通分量,样例\(2\)就是一个反例 上面这个图如果缩点双会缩成\(3\)个,但是缩边双会将整个图缩成\(1\)个点. 假如我们询问的是\((1,4)\)之间的简单路径,而图中权值最小的点为\(7\)号点,那么如果缩成了边双联通分量,你的答案会是\(7\)号点的权值,意即认为可以走到\(7\)号点,但实际上如果到\(7\)号…
Solution 先Tarjan求出点双联通分量 并缩点. 用$multiset$维护 点双内的最小点权. 容易发现, 点双内的最小点权必须包括与它相连的割边的点权. 所以我们必须想办法来维护. 所以考虑用割点的点权更新它的父节点, 这样查询 点双 内的最小点权只需要查询本身的 $multiset$ 和 它的父亲节点就可以了. 最后加个树剖就能过啦! Code #include<cstdio> #include<cstring> #include<algorithm>…
传送门 先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护. 注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset. 代码: #include<bits/stdc++.h> #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) using namespace std; inline int read(){ int ans=…
题目链接 CF487E 题解 圆方树 + 树剖 裸题 建好圆方树维护路径上最小值即可 方点的值为其儿子的最小值,这个用堆维护 为什么只维护儿子?因为这样修改点的时候就只需要修改其父亲的堆 这样充分利用了一对一的特性优化了复杂度 如此询问时如果\(lca\)为方点,再询问一下\(lca\)的父亲即可 复杂度\(O(qlog^2n)\) #include<algorithm> #include<iostream> #include<cstring> #include<…
给你n,K,问你要选出最少几个长度为2的K进制数,才能让所有的n位K进制数删除n-2个元素后,所剩余的长度为2的子序列至少有一个是你所选定的. 如果n>K,那么根据抽屉原理,对于所有n位K进制数,必然会至少有1个数字出现2次或以上,所以00,11,...,K-1 K-1这样的数对是必选的. 对于其他的情况下,我们需要让他构造不出来n位不含重复数字的K进制数. 于是可以把K个数尽可能平均地分成n-1组,每一组内部让他们选出任意两个数都不合法,于是只能组间互相拼,这样他只能构造出最多n-1位的K进制…
圆方树总结 所谓圆方树就是把一张图变成一棵树. 怎么变啊qaq 这里盗一张图 简单来说就是给每一个点双新建一个点,然后连向这个点双中的每一个点.特殊的,把两个点互相连通的也视作一个点双. 我们把原来就有的点称作圆点,因点双而新建的点称之为方点. 这样这棵圆方树就会有一个这样的性质:和每个圆点(方点)相连的点一定是方点(圆点). 我们在每个圆点上维护这个点原本的信息,在方点上维护这个点双的信息,这样就能完成一些关于一般图的所有简单路径的询问了. 例如:我现在有一张一般图,每个点有一个点权,要求从\…
圆方树第二题…… 图中询问的是指定两点之间简单路径上点的最小权值.若我们建出圆方树,圆点的权值为自身权值,方点的权值为所连接的圆点的权值最小值(即点双连通分量中的最小权值).我们可以发现其实就是这两点在圆方树上经过的点的最小权值,因为在这上面若经过了一个方点,说明可以经过这个点双连通分量中任何一个点并且到达想到的点.(方点所连接的点都是相互可达的). 所以问题转化为了求树上两点之间路径的最小点权.并且需要注意的是:链顶的点需要把它的父亲节点也考虑进来,因为它的父亲节点与它是属于同一个双连通分量的…
LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先). 知识需求:1)RMQ的ST算法   2)欧拉序列 1)RMQ的ST算法: 可以参考我的这篇博客:RMQ原理及实现 2)欧拉序列: 所谓欧拉序,就是从根结点出发,按dfs的顺序经过每一个结点最后绕回原点的顺序,比如下面这个例子,欧拉序就是A-B-D-B-E-G-E-B-A-C-F-H-F-C-A 那么欧拉序和rmq与LCA有…
https://codeforces.com/contest/487/problem/E http://uoj.ac/problem/30 显然割点走过去就走不回来了...可以看出题目跟点双有关 有一个结论:如果在点双中有不同的点a,b,c,那么一定存在点不重复的路径从a到c再到b. 证明(摘自https://codeforces.com/blog/entry/14832): 显然这样的点双中,点数>=3,因此移除任意点或任意边,仍然连通 新建一张网络流图.用边(u,v,w)表示从u到v容量为w…