CF487E-Tourists】的更多相关文章

[UOJ30]/[CF487E]Tourists 题目大意: 一个\(n(n\le10^5)\)个点\(m(m\le10^5)\)条边的无向图,每个点有点权.\(q(q\le10^5)\)次操作,操作包含以下两种: 修改一个点的点权. 找到一条连接\((u,v)\)的简单路径,使得最小权值最小.求最小权值. 思路: 缩点后建圆方树,用树链剖分维护权值.发现修改圆点后可能修改\(O(n)\)个方点. 考虑更改方点的含义,让方点只维护子结点,因此修改一个圆点只需要修改它的父亲方点(利用BFS序+线段…
终于学了圆方树啦~\(≧▽≦)/~ 感谢y_immortal学长的博客和帮助 把他的博客挂在这里~ 点我传送到巨佬的博客QwQ! 首先我们来介绍一下圆方树能干什么呢qwq 1.将图上问题简化到树上问题 2.一般是路径并 3.资磁修改! 然后我们就可以步入正题来学习圆方树啦~ ——超良心圆方树教程!—— 这里是一个前缀芝士清单! 1.Tarjan求点双连通分量 2.树链剖分 如果你大体知道这两个东西在干什么 那你看接下来的教程就会非常熟练[大雾 一.圆方树的构造 原图中的点称为原点 新建的点称为方…
CF487E Tourists(圆方树+树链剖分+multiset/可删堆) Luogu 给出一个带点权的无向图,两种操作: 1.修改某点点权. 2.询问x到y之间简单路径能走过的点的最小点权. 题解时间 总感觉是将一堆水题拼出来的丑陋产物(划去) 毫无疑问看题直接搞上圆方树. 用可删堆或者multiset维护方点的权值. 查询直接树剖搞. 但这样会发现修改时间复杂度无法保证. 所以改成每个方点只记录子节点的权值. 当lca为方点时答案计算一下它上面的圆点. $ O(nlog^{2}n) $ #…
题目链接 CF487E 题解 圆方树 + 树剖 裸题 建好圆方树维护路径上最小值即可 方点的值为其儿子的最小值,这个用堆维护 为什么只维护儿子?因为这样修改点的时候就只需要修改其父亲的堆 这样充分利用了一对一的特性优化了复杂度 如此询问时如果\(lca\)为方点,再询问一下\(lca\)的父亲即可 复杂度\(O(qlog^2n)\) #include<algorithm> #include<iostream> #include<cstring> #include<…
题目链接 思路分析 看到这道题首先想到的此题的树上版本.(不就是树链剖分的板子题么?) 但是此题是图上的两点间的走法,自然要想到是圆方树. 我们先无脑构建出圆方树. 我们先猜测:设后加入的节点权值为 inf,直接再圆方树上做述链剖分? 看上去很简单,但是完全不对,考虑同一个点双的情况. 他们在圆方树中是兄弟的关系,根本剖不到上面去,但是同样对答案有贡献. 所以不能树链剖分去做? NO! 我们来模拟一下这组数据: n = 10 m = 11 1 2 2 3 1 4 3 4 4 5 5 6 4 7…
传送门 注意到我们需要求的是两点之间所有简单路径中最小值的最小值,那么对于一个点双联通分量来说,如果要经过它,则一定会经过这个点双联通分量里权值最小的点 注意:这里不能缩边双联通分量,样例\(2\)就是一个反例 上面这个图如果缩点双会缩成\(3\)个,但是缩边双会将整个图缩成\(1\)个点. 假如我们询问的是\((1,4)\)之间的简单路径,而图中权值最小的点为\(7\)号点,那么如果缩成了边双联通分量,你的答案会是\(7\)号点的权值,意即认为可以走到\(7\)号点,但实际上如果到\(7\)号…
Solution 先Tarjan求出点双联通分量 并缩点. 用$multiset$维护 点双内的最小点权. 容易发现, 点双内的最小点权必须包括与它相连的割边的点权. 所以我们必须想办法来维护. 所以考虑用割点的点权更新它的父节点, 这样查询 点双 内的最小点权只需要查询本身的 $multiset$ 和 它的父亲节点就可以了. 最后加个树剖就能过啦! Code #include<cstdio> #include<cstring> #include<algorithm>…
圆方树不仅能解决仙人掌问题(虽然我仙人掌问题也没用过圆方树都是瞎搞过去的),还可以解决一般图的问题 一般图问题在于缩完环不是一棵树,所以就缩点双(包括双向边) 每个方点存他所在点双内除根以外的点的最小权值,这样的好处是更新原点的时候不用更新它一圈的方点,只更新父亲即可 树剖维护,然后查的时候如果lca是方点,就额外查一下他的父亲 #include<iostream> #include<cstdio> #include<vector> #include<cstrin…
本题解并不提供圆方树讲解. 所以不会圆方树的出门右转问yyb 没有修改的话圆方树+链剖. 方点的权值为点双连通分量里的最小值. 然后修改的话圆点照修,每一个方点维护一个小根堆. 考虑到可能被菊花卡死. 我们每一个方点只维护儿子的最小值. 当询问的路径\(lca\)为方点时,\(ans=min(ans,w[fa[lca]])\)即可. #include<iostream> #include<cstring> #include<cstdio> #include<cma…
做这题的时候有点怂..基本已经想到正解了..结果感觉做法有点假,还是看了正解题解.. 首先提到简单路径上经过的点,就想到了一个关于点双的结论:两点间简单路径上所有可能经过的点的并等于路径上所有点所在点双的并,也就是说,在建一棵圆方树,方点表示所在点双里的最小点权,两个圆点之间的路径上所有方点的最小值就是答案. 然后这题有一个修改单点..修改一个圆点的点权的时候和他相邻的方点维护的min都可能变,所以每个方点开一个multiset维护点双最小值就行了. 但是这样复杂度不能保证,因为每次圆点可能会和…
QWQ果然我已经什么都学不会的人了. 这个题目要求的是图上所有路径的点权和!QWQ(我只会树上啊!) 这个如果是好啊 这时候就需要 圆方树! 首先在介绍圆方树之前,我们先来一点简单的前置知识 首先,我们需要知道什么是 点双联通分量 若一个无向图中的去掉任意一个节点都不会改变此图的连通性,即不存在割点,则称作点双连通图.那么一个极大的点双联通子图,就是一个双联通分量了 那么求这个方法,和普通求割点的\(tarjan\)类似 用一个栈维护所有的点 对于搜索到一个割点,然后把他的栈内部的点依次弹栈,直…
CF487E Tourists 一般图,带修求所有简单路径代价. 简单路径,不能经过同一个点两次,那么每个V-DCC出去就不能再回来了. 所以可以圆方树,然后方点维护一下V-DCC内的最小值. 那么,从任意一个割点进入这个DCC,必然可以绕一圈再从另一个割点出去. 所以,路径上的最小值,就是圆方树路径上的最小值.方点的最小值就是在这个DCC中走一走得到的. 树链剖分+线段树维护路径 用堆维护方点四周的圆点的最小值.然后更新. 一个问题是: 更新一个割点圆点,会影响到四周所有的方点.暴力更新,菊花…
Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. 偶尔也会打一些比赛找找手感(比如HHHOJ的比赛,Luogu比赛,以及comet OJ上之前的CCPC题) CF和CC看情况,主要是我真的不太喜欢读英文题的恐怖感觉233 希望这段时间的努力可以让我不跪省选吧 2-26 早上晨跑完了就和杨浩讲了停课的事,不出意外地很轻松就通过了. 然后回班拿了点东…
菜鸡 wxw 的计划(肯定会咕咕咕 12.27 luogu P4244 [SHOI2008]仙人掌图 II(咕咕咕 luogu P4246 [SHOI2008]堵塞的交通 (没有咕! luogu P1848 [USACO12OPEN]书架Bookshelf(不咕! 12.28 一场 cf 虚拟比赛(div.2 rk 18) 一场 cf div.2,用的是小号(i_am_sooke)(rk 20) 题解在这里 sooke 看到我小号的用户名貌似不太开心 qaq 我好菜啊 qaq 12.29 luo…
[CF487E]Tourists(圆方树) 题面 UOJ 题解 首先我们不考虑修改,再来想想这道题目. 我们既然要求的是最小值,那么,在经过一个点双的时候,走的一定是具有较小权值的那一侧. 所以说,我们可以让所有的方点表示它所在的点双的最小权值, 这样子只需要对于圆方树树链剖分之后维护链的最小值就行了. 好的,回归带修改,无非是要动态的维护一下方点的最小权值了. 你问我怎么动态维护若干个值的最小值?搞个\(multiset\)不就好了吗? 但是,现在问题又来了,如果每次修改一个点的权值(这个点当…
洛谷链接 题意 给定一张无向图,点有点权,多次询问两点之间路径上点权最小的点的可能的最小值,支持修改点权. Sol 一棵树就很简单 , 于是我们考虑点双(环)上的情况 , 直观想法就是缩完点双后一个点双的权值直接就是其中的最小值 , 这样我们要讨论的就是路径的起始端可能是在割点上的情况. 直接建一个广义圆方树就没有什么要多考虑的了. 把每一个点双找出来新建方点来代表.这样在圆方树上过了方点就相当与可以在点双里面随便走 , 那么方点的点权自然就是点双里所有点的点权的最小值了. 路径询问和修改点权就…
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那么额…
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\) 经过了同一个割点,那么一定不合法…
传送门 好毒瘤的一道题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的父亲节点. 复…
既然有这条性质,这题就很简单了: \(可能在a->b的简单路径上的点集,就是圆方树上a->b路径上方点代表的点双的并集\) 对每一个方点维护一个\(multiset\),代表其在圆方树上子结点的最小值,这样更改就只需要改父结点辣.剩下的用树剖乱搞就行了 #include <bits/stdc++.h> using namespace std; #define N 200000 #define INF 0x3f3f3f3f #define lson (o<<1) #def…
求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权,方点用$ multiset$存连通分量的点权集合,权值为集合中的最小值 每次询问就变成求圆方树中一条树链的最小值,可以用树链剖分维护 考虑修改一个圆点的点权 对于这个圆点直接修改,但如果暴力修改周围方点,复杂度明显爆炸 我们修改一下方点的定义,改为这个连通分量中除了自己父亲圆点外其他圆点的最小权值…