[TJOI2012]桥(最短路+线段树)】的更多相关文章

有n个岛屿, m座桥,每座桥连通两座岛屿,桥上会有一些敌人,玩家只有消灭了桥上的敌人才能通过,与此同时桥上的敌人会对玩家造成一定伤害.而且会有一个大Boss镇守一座桥,以玩家目前的能力,是不可能通过的.而Boss是邪恶的, Boss会镇守某一座使得玩家受到最多的伤害才能从岛屿1到达岛屿n(当然玩家会选择伤害最小的路径).问, Boss可能镇守岛屿有哪些. Solution 我们可以先找出一条最短路,那么我们要删去一条边的话,肯定要从这条路中删. 那么接着考虑一条不在这条路径上的边能够产生的贡献.…
首先找出任意一条1-n的最短路径.显然删除的边只有在该最短路上才会对最短路长度产生影响. 不会证明地给出一个找不到反例的结论:删除一条边后,新图中一定有一条1-n的最短路径上存在一条边x->y,满足在原图中1-x的最短路和y-n的最短路上该删除边均不是必经边. 另一个显然的结论是,原图中经过边x->y情况下的最短路一定可以描述为1->l->x->y->r->n,其中l和r是之前找出的最短路上的两个点.因为如果在到达x之前在最短路上反复横跳,不如直接走原最短路.后者…
分析:(官方题解) 首先考虑暴力,显然可以直接每次O(n^2) ​的连边,最后跑一次分层图最短路就行了. 然后我们考虑优化一下这个连边的过程 ,因为都是区间上的操作,所以能够很明显的想到利用线段树来维护整个图, 连边时候找到对应区间,把线段树的节点之间连边.这样可以大大缩减边的规模,然后再跑分层图最短路就可以了. 但是这样建图,每一次加边都要在O(logn)个线段树节点上加边,虽然跑的非常快,但是复杂度仍然是不科学的. 为了解决边的规模的问题,开两棵线段树,连边时候可以新建一个中间节点,在对应区…
https://www.cnblogs.com/Gloid/p/10273902.html 这篇文章已经从头到尾讲的非常清楚了,几乎没有什么需要补充的内容. 首先$O(n\log^2 n)$的做法比较显然,倍增优化建图+最短路即可. 然后利用“每个塌陷最多会被使用一次”的性质,为每个塌陷(边也看作一种塌陷)建一个点跑一个变体的Dijkstra就可以优化到$O((n+m)\log n)$. 这里讲下我最后一步的实现. 为每个塌陷找未标记的点很简单,并查集f[i]表示离i最近的未被标记的祖先,每次标…
2725: [Violet 6]故乡的梦 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 678  Solved: 204[Submit][Status][Discuss] Description Input Output Sample Input 6 7 1 2 1 2 3 1 3 4 2 4 5 1 5 6 1 1 3 3 4 6 3 1 6 4 1 2 1 3 4 3 6 5 Sample Output 7 6 Infinity 7 HINT…
Wannafly挑战赛2_D Delete Problem : 给定一张n个点,m条边的带权有向无环图,同时给定起点S和终点T,一共有q个询问,每次询问删掉某个点和所有与它相连的边之后S到T的最短路,询问之间互相独立(即删除操作在询问结束之后会立即撤销),如果删了那个点后不存在S到T的最短路,则输出-1. n,q <= 10^5 Solution : 注意到题中所给的是DAG,首先可以找出图中结点的拓扑序.对于删除掉某个点之后,若仍存在一条从S到T的最短路,那么对应到拓扑序中,必然有一条边跨过了…
题目描述 N个点,M条边的有向图,求点1到点N的最短路(保证存在). 1<=N<=1000000,1<=M<=10000000 输入格式 第一行两个整数N.M,表示点数和边数.  第二行六个整数T.rxa.rxc.rya.ryc.rp.  前T条边采用如下方式生成:  1.初始化x=y=z=0.  2.重复以下过程T次:  x=(x*rxa+rxc)%rp;  y=(y*rya+ryc)%rp;  a=min(x%n+1,y%n+1);  b=max(y%n+1,y%n+1); …
新技能get✔. 线段树优化建边主要是针对一类连续区间和连续区间之间建边的题,建边非常的优秀.. 这题中,每次要求$[l1,r1]$每一点向$[l2,r2]$每一点建无向边,然后单元最短路. 暴力建边,边数$O(n^2m)$,时空双炸. 优化一点的建边,对于一个区间的点,把他们统一向一个虚点连零边,再从这个虚点向另一个区间每一个点连一条带权边.这样,每一条路径都是可以通过这个来表示的.边数$O(nm)$,仍然不行. 然后,采用线段树的优秀的“将区间拆分成不超过$\log n$个小区间”的性质,对…
题意:给你一张无向图,有若干次操作,每次操作会修改一条边的边权,每次修改后输出1到n的最短路.修改相互独立. 思路:我们先以起点和终点为根,找出最短路径树,现在有两种情况: 1:修改的边不是1到n的最短路上的边,那么可能出现的情况就是这条边的权值变得足够小,出现了新的最短路,那么我们只需判断一下是不是出现了新的最短路即可,假设这条边的两端是x, y,修改后的权值是z,dis1是从1开始的最短路,dis2是从n开始的最短路,那么ans = min(dis1[n], dis1[x] +dis2[y]…
对不起对不起,辣鸡蒟蒻又来用核弹打蚊子了 完全ignore了题目给出的最短路,手工搞出一个最短路,发现对答案没什么影响 所以干脆转化为经典问题:每次询问删掉一条边后的最短路 如果删掉的是非最短路边,那么显然毫无影响 如果删掉的是最短路边,那么我们倒过来,考虑这个时候每条非最短路边的贡献.对于一条非最短路边 \((u,v)\) ,我们很容易得到一定包含它的最短路一定是满足 \(1 \to x \to u \to v \to y \to n\) 这样的结构,其中 \(x,y\) 都在选定的最短路上,…