原文链接https://www.cnblogs.com/zhouzhendong/p/NOI2018Day1T1.html 题目传送门 - 洛谷P4768 题意 给定一个无向连通图,有 $n$ 个点 $m$ 条边,每条边有两个属性:海拔$(a)$.距离$(l)$. 有 $Q$ 组询问,每组询问两个数 $v,p$,表示询问从点 $v$ 出发,从第一次走海拔高度不超过 $p$ 的边起算,问行走距离最小为多少.(即,在第一次走海拔高度不超过 $p$ 的边之前,走的所有边都是免费的) $T$ 组数据,强…
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边都是有积水的. Yazid 是一名来自魔力之都的OIer,刚参加完ION2018…
BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不写题解了,趁着周末都更一下吧. 处理出以1为起点的最短路dis. 考虑每次只能走海拔大于p的边,用kruscal重构树维护一个以海拔为关键字的最大生成树. 这样我们每次能走的连通块就是一个重构树中的一个子树. 倍增找一下是哪棵子树,子树取dis的最小值即可. 代码: #include <cstdio…
题意 给你一个无向图,其中每条边有两个值 \(l, a\) 代表一条边的长度和海拔. 其中有 \(q\) 次询问(强制在线),每次询问给你两个参数 \(v, p\) ,表示在 \(v\) 出发,能开车经过海拔 \(> p\) 的边,其中 \(\le p\) 的边只能步行,步行后不能继续开车了. 询问它到 \(1\) 号点最少要步行多远. 多组数据.\(n \le 200000~~ m,q \le 400000\) . 题解 一个直观的想法,对于每次询问,我们保留 \(>p\) 的边,然后求出联…
搜了题解才把题搞明白.明白之后发现其实题意很清晰,解题思路也很清晰,只是题目表述的很不清晰…… 大意如下—— 给你一个无向图,图中任意两点的距离是两点间所有路径上的某一条边,这条边需要满足两个条件:1. 这条边这两点间某条路径上的最长边:2. 这条边是这两点间所有路径上的最长边中的最短边. 简单来说,假如a到d有两条路径,一条经过b,一条经过d,其中ab = 1, bd = 3, ac = 2, cd = 2,那么abd上的最长边为3,acd上的最长边为2,则ad的距离为2. 如果a, d两点间…
最近在学最小生成树得时候又用到了并查集,一起来整理一下 1.并查集 并查集就是字面意思,将两个单独得集合合并成一个大的集合. 并查集关键在于两个操作:合并和查找 先要完成查找操作(合并操作在查找的基础上) int find(int x) { return root[x] == x ? x : root[x]=find(root[x]); } 查找x个体所在的根结点,从而确定集合关系 ,find函数缩短路径 ,把一个集合中所有元素都指向一个根结点,减少树的高度 ,如果x的根结点root[x]为自己…
LOJ2718 BZOJ5415 洛谷P4768 Rank3+Rank1无压力 BZOJ最初还不是一道权限题... Update 2019.1.5 UOJ上被hack了....好像是纯一条链的数据过不了,不管了....现在不想改. 容易想到按高度Kruskal重构树+预处理到点1的距离dis. 建一棵最大生成树,如果随便建的话,如果非树边能走,整棵树都能走答案当然是0...:如果有些树边不能走,那么可走范围被限制在了某个连通块. 然而被限制在某个连通块和图(还要暴力,难道树分块?)没什么区别,所…
并查集:使用并查集可以把每个连通分量看作一个集合,该集合包含连通分量的所有点.这两两连通而具体的连通方式无关紧要,就好比集合中的元素没有先后顺序之分,只有属于和不属于的区别.#define N 100 int father[N]; void init() { for(int i=0;i<n;i++) father[i]=1; } void union(int x,int y) //合并两元素所在集合 { x=getfather(x); y=getfather(y); if(x!=y) fathe…
Kruskal重构树裸题, Sunshine互测的A题就是Kruskal重构树,我通过互测了解到了这个神奇的东西... 理解起来应该没什么难度吧,但是我的Peaks连WA,,, 省选估计要滚粗了TwT #include<cstdio> #include<cstring> #include<algorithm> #define for1(i,a,n) for(int i=(a);i<=(n);i++) #define for2(i,a,n) for(int i=(a…
题目描述 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000). 现在有 K个询问 (1 < = K < = 20,000). 每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少? 输入 第一行: N, M, K. 第2..M+1行: 三个正整数:X, Y, and…