洛谷 361行代码的由来 数据分治大发好啊- NOI的签到题,可怜我在家打了一下午才搞了80分. 正解应该是kruskal重构树或排序+可持久化并查集. 我就分点来讲暴力80分做法吧(毕竟正解我也没太懂)- 前6个点 这6个点有两种做法: 法1:最短路. 这6个点都是离线的,而且只有一种海拔,所以直接最短路. 跑完之后,直接判断海拔与水位,输出即可. 不过这些分也并不好拿,spfa会被卡,要用堆优化dijkstra. 法2:离线排序+并查集. 其实这个暴力思想就是正解思想了,很好想到的. 首先跑…
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并且他有一部车,车只能在海拔高度大于降水量的道路上行驶,如果某一条边的海拔高度小于等于降水量,那么小\(Y\)就必须下车步行,现在有\(q\)次询问,每次询问从目标点到\(1\)要步行的最短距离.强制在线. 题解: 这题我采用的做法是kruskal重构树. 可能大家对kruskal重构树并不是很熟悉,…
\(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的无向连通图,边形如 \((u,v,l,a)\).每次询问给出 \(u,p\),回答所有从 \(u\) 出发,只经过 \(a\) 值 \(>p\) 的边能够到达的点中,到 \(1\) 号点的最小距离(以 \(l\) 之和为路径距离).强制在线,多测.   \(n\le2 \times 10^5\),\(m,q\le4 \times 10^5\). \(\mathcal{Soluti…
题目传送门 归程 格式难调,题面就不放了. 分析: 之前同步赛的时候反正就一脸懵逼,然后场场暴力大战,现在呢,还是不会$Kruskal$重构树,于是就拿可持久化并查集做. 但是之前做可持久化并查集的时候感觉掌握的并不熟,还是需要参照别人的题解,不过至少现在对可持久化的理解更深了一步,而且终于这题给调对了. Code: //It is made by HolseLee on 23rd Aug 2018 //Luogu.org 4768 #include<cstdio> #include<c…
题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重构树 我们按边权的海拔从大到小排序,建出Kruskal重构树 这一定是一个小根堆 那么一个点的子树内的节点一定可以相互到达且经过的最小的海拔为该点权值 那么每次查询的时候,我们只需要倍增的处理出从这个点向上走多少才不能满足条件 然后在子树内查每个点到$1$的最大值即可. 哎,调了一上午也没调出来,只…
闲话 一个蒟蒻,在网络同步赛上进行了这样的表演-- T2组合计数不会,T3字符串数据结构不会,于是爆肝T1 一开始以为整个地图都有车,然后写了2h+的树套树,终于发现样例过不去 然后写可持久化并查集Debug到13:20过了前4个样例,然后第5个T飞了. FST? ...... FST! 完美收获50分暴力分. 原来是按秩合并那里咕咕了. 从50到100的蜕变,只需一行,你值的拥有. 思路 不会kruscal重构树 容易发现,假设我们确定了水位线,那么就确定了图中有哪些边是连通的.这时候的答案该…
传送门 前置技能,克鲁斯卡尔重构树 我们按道路的高度建一个最大生成树,然后建好克鲁斯卡尔重构树 那么我们需要知道一颗子树内到1点距离最近是多少(除此之外到子树内任何一个点都不需要代价) 可以一开始直接跑一个dijkstra(关于SPFA,他死了) 然后一遍树形dp就可以了 //minamoto #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include&…
正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海拔.有$Q$组询问,每次查询从$x$出发,经过海拔超过$p$的所有路径,能到达的节点中距离1号节点的最短路径长是多少$QwQ$ 首先看到这个对海拔的限制就显然考虑$kruscal$重构树呗$QwQ$,然后说是所有海拔超过$p$的路径能到达的点中最短路最小的点$QwQ$? 可以理解成把最短路作为一个点…
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME pre=${name%.*} g++ -O2 $dir/$name -o $pre -g -Wall -std=c++11 if test $? -eq 0; then gnome-terminal -x bash -c "time $dir/$pre;echo;read;" fi*/ #…
\(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\times10^6\). \(\mathscr{Solution}\)   注意到一个显然的事实,对于某个前缀 \(S[:i]\) 以及两个起始下标 \(p,q\),若已有 \(S[p:i]<S[q:i]\),那么在所有的 \(j>i\) 中,都有 \(S[p:j]<S[q:j]\).换言之,最终…