【题解】NOIP2018 旅行】的更多相关文章

\(\mathcal {NOIP2018} 旅行 - 竞赛题解\) 坑还得一层一层的填 填到Day2T1了 洛谷 P5022 题目 (以下copy自洛谷,有删减/修改 (●ˇ∀ˇ●)) 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 \(n\) 个城市之间有 \(m\) 条双向道路.每条双向道路连接两个城市. 不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路.并且, 从任意一个城市出发,通过这些道路都可以到达任意…
[LG5022][NOIP2018]旅行 题面 洛谷 题解 首先考虑一棵树的部分分怎么打 直接从根节点开始\(dfs\),依次选择编号最小的儿子即可 而此题是一个基环树 怎么办呢? 可以断掉环上的一条边,这样就变为一棵树了 再用上面的方法做即可 \(tips\) \(:\) 断环上的边,其实可以直接用\(tarjan\)把桥求出来 不是桥的就是环上的边 考场上的代码有点乱 #include <iostream> #include <cstdio> #include <cstd…
题目戳我 \(\text{Solution:}\) 首先题目描述有一点不准确:回头是必须要走完一条路无路可走的时候才能返回. 对于树的情况:显然贪心做就完事了. 对于基环树的情况:对于一个\(n\)条边的环,如果我们已经走了\(n-1\)条边,那么此时我们已经可以到达环上任意一点了.所以我们可以枚举并删边. 题目中要求一个点除非回溯否则不能再次访问,这意味着一定有一条边无法访问,枚举那一条边即可. 时间复杂度\(O(n^2).\) #include<bits/stdc++.h> using n…
NOIP2018(普及组)T1标题统计(title) 题解 [代码(AC)] #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> using namespace std; ]; int main (){ gets(s); int len=strlen(s); ;…
\(\mathcal{NOIP2018}\) 保卫王国 - 竞赛题解 按某一个炒鸡dalao名曰 taotao 的话说: \(\ \ \ \ \ \ \ \ \ "一道sb倍增题"\) 顺便提一下他的[题解](因为按照这个思路写的,所以代码看起来也差不多) 因为比较复(胡)杂(炸),可能需要理解久一点 『题目』 参见 [洛谷 P5024] 『解析』 一.初步思考 如果不考虑多次询问的话,显然可以进行一次简单的树形DP,特殊判断一下当前的点(也就是城市)能不能选(放军队)就行了~ 但是显…
\(\mathcal {NOIP2018}\) 赛道修建 - 竞赛题解 额--考试的时候大概猜到正解,但是时间不够了,不敢写,就写了骗分QwQ 现在把坑填好了~ 题目 (Copy from 洛谷) 题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 \(m\) 条赛道. C 城一共有 \(n\) 个路口,这些路口编号为 \(1,2,...,n\),有 \(n-1\) 条适合于修建赛道的双向通行的道路,每条道路连接着两个路口.其中,第 \(i\) 条道路连接的两个路口编号为 \(a…
填很久以前的坑. 旅行 给一棵 n 个点的基环树,求字典序最小的DFS序. n ≤ 5000 题解 O(n2) 做法非常显然,枚举断掉环上哪条边然后贪心即可.当然我去年的骚操作只能得88分. O(n log n) 做法,推荐duoluoluo的博客. 环上要删的边是固定的,我们在环上走的时候,只有当其出边连向的点中,环上点编号最大,且比回溯到父亲后第一个走的点还大,这时候才回溯,其他时候就正常跑DFS. #include<bits/stdc++.h> using namespace std;…
题目描述 小$Y$是一个爱好旅行的$OIer$.她来到$X$国,打算将各个城市都玩一遍.小$Y$了解到,$X$国的$n$个城市之间有$m$条双向道路.每条双向道路连接两个城市.不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路.并且,从任意一个城市出发,通过这些道路都可以到达任意一个其他城市.小$Y$只能通过这些道路从一个城市前往另一个城市.小$Y$的旅行方案是这样的:任意选定一个城市作为起点,然后从起点开始,每次可以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者…
这道题考场上的时候暴力写RE了,我果然很菜. 看了一篇大佬的的题解才明白 dalao的题解 但是解释很少哇,为了造福人类,在下发一篇详细一点的题解. 预处理:用vector把与每个点相连的点存起来,排一遍序. m=n-1的情况 这种比较好处理,搜到一个节点后找一个与该节点相连的最小的编号的儿子继续往下搜,显然这样答案更优.不过要小心RE. 具体代码就是: void work(int u,int fa) { if(vis[u]) return ; vis[u]=1; ans[++dep]=u; f…
数据范围多了2个0就是不一样,O(n^2)只能68分了.(其中60分是n=m+1和原题一样的做法送的),这题直接从NOIP难度变为NOI Plus难度了不说废话直接写题解:首先dfs一遍找到环,然后和n=m+1一样从1号点访问,然后跑到环以后,对于环上的点,可以执行仅一次返回到第一次到达环上的点的操作.所以dfs记录的时候记录下次访问的点就可以,因为退回操作后只要退回途中下面有点,那么就必须访问,讨论一下退回途中访问的第1个点,比较其余环上下一个点的大小就行了.注意dfs时要打标记(否则可能会有…