解题:NOI 2018 归程】的更多相关文章

[LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 \(v\) 和一个高度 \(h\), 鸭子德可以先无需花费地在高度大于 \(h\) 的边上任意行动, 然后可以在任意点开始以花费等于距离的模式行动. 问最小的花费. \(|V|\le 2\times 10^5,|E|\le 4\times 10^5,q\le 4\times 10^5,h\le 10…
题面 清新友好的题目 跑一个最短路,然后对海拔建Kruskal重构树,从最后接上去的边(最低的一个)开始DFS一下处理子树里路程的最小值. 询问是每次在重构树上倍增找到深度最浅的海拔高于当天水位线的节点,其子树内的点必定可以通过乘车互相到达. #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ,M=,X=,inf=2e9; s…
Description 传送门 Solution 65分做法 先求出每个点到\(1\)号点的最短路,记为\(d[i]\).然后按照海拔从大到小依次加边,并查集维护每个连通块中\(d[i]\)的最小值,并同时回答询问. 70分做法 形态为树,以\(1\)为根,询问时向上倍增. 满分做法 结合上两种做法,按照海拔建出Kruskal重构树,求出每个点子树中的\(d[i]\)最小值,询问时向上倍增. Code #include <queue> #include <cstdio> #incl…
题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法,即子节点的限制少于父节点 #include <cstdio> #include <algorithm> #include <cstring> #include <queue> #define inf 0x3f3f3f3f #define ll long long…
[LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l,r]\), 求 \(T\) 中有多少本质不同的子串不是 \(S[l:r]\) 的子串. \(|S|\le 5\times 10^5,q\le 10^5,\sum|T|\le10^6\). 题解 普通的码农字符串题... 获得成就: \(40\texttt{min}(2400\texttt{s})\)…
转眼离 NOI 2018 已经过了一个星期了,退役的我还是随便来水水吧. 语法.错字之类的可能会很多,但是我也不拘这点小节了. 恭喜 yww, zjt, sk 进队,zwl, myh au , yay 和 sbypl ag ..我们全都进前 100 了呢.. 开幕式: 我以前一家11口人很穷,所以就立志要搞一个能吸金的组织 于是就有了这个什么CCF 一做就是22年,期间啊国家没有给我们一分钱,全靠我们自己骗钱,资本主义吃枣药丸 我们就弄了个CCF会员,每年定期交钱,只有一年参加所有的赛事才能回本…
[LOJ 2721][UOJ 396][BZOJ 5418][NOI 2018]屠龙勇士 题意 题面好啰嗦啊直接粘LOJ题面好了 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\)~\(n\) 顺序杀掉 \(n\) 条巨龙,每条巨龙拥有一个初始的生命值 \(a_i\) .同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每次增加 \(p_i\),直至生命值非负.只有在攻击结束后且当生命值恰好为 \(0\) 时它才会死去. 游戏开始时玩家拥有 \(m\…
NOI Day1T1归程(Kruskal重构树+Dijkstra) 题目 洛谷题目传送门 题解 其实我不想写......,所以...... 挖个坑......我以后一定会补的 luogu的题解讲的还是很详细的...... 恩,感谢cwen详细教我做这道题,让我2遍A 然后我丑陋的代码(代码太长,所以压得很丑) #include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #incl…
题面在这里就不放了. 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信息. 离线的思路对满分做法有一定的启发性,很容易想到将并查集持久化一下就能支持在线了. 但是这个是两个$log$的,有卡常的风险也不是很方便写. 当时思考了一下就快速写完离线做法就去做其他题了. 对于这道题,有一个更好的做法:Kruskal重构树. 事实上如果你了解这个东西,那你就能很快的给出解,那…
题解 Kruskal重构树:每次一条边连接两个集合,建一个新点,点权为该边边权:把这两个集合的根连向新点. 性质:(如果求的是最大生成树)叶子结点是图中实际结点:叶子到根路径上点权递减:两点间lca的权值就是这两点走最大生成树经过的最小边 然后对于这题我们建重构树然后每次倍增找到一个深度极小的祖先u,返回u子树内实结点dis的最小值即可 #include <algorithm> #include <cstdio> #include <queue> using names…