【题解】NOIP2018 旅行
\(\text{Solution:}\)
首先题目描述有一点不准确:回头是必须要走完一条路无路可走的时候才能返回。
对于树的情况:显然贪心做就完事了。
对于基环树的情况:对于一个\(n\)条边的环,如果我们已经走了\(n-1\)条边,那么此时我们已经可以到达环上任意一点了。所以我们可以枚举并删边。
题目中要求一个点除非回溯否则不能再次访问,这意味着一定有一条边无法访问,枚举那一条边即可。
时间复杂度\(O(n^2).\)
#include<bits/stdc++.h>
using namespace std;
const int inf=(1<<30);
int n,m,E[5001][2];
vector<int>G[5001];
namespace P1{
vector<int>ans;
void dfs(int x,int y){
ans.push_back(x);
for(int i=0;i<G[x].size();++i){
int j=G[x][i];
if(j==y)continue;
dfs(j,x);
}
}
void solve(){
dfs(1,0);
for(int i=0;i<ans.size();++i)printf("%d ",ans[i]);
puts("");
}
}
namespace P2{
vector<int>ans,res;
bitset<5001>vis;
int Dv,Du;
void dfs(int x,int fa){
res.push_back(x);vis[x]=1;
for(int i=0;i<G[x].size();++i){
int j=G[x][i];
if((x==Du&&j==Dv)||(x==Dv&&j==Du)||vis[j]||j==fa)continue;
dfs(j,x);
}
}
inline bool check(){
for(int i=0;i<n;++i){
if(ans[i]!=res[i]){
if(ans[i]>res[i])return false;
return true;
}
}
return true;
}
void solve(){
for(int i=0;i<n;++i)ans.push_back(inf),res.push_back(0);
for(int i=1;i<=m;++i){
res.clear();vis.reset();
Du=E[i][0],Dv=E[i][1];
dfs(1,0);
for(;(int)res.size()<n;)res.push_back(inf);
if(!check())swap(res,ans);
}
for(int i=0;i<n;++i)printf("%d ",ans[i]);
puts("");
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
E[i][0]=x,E[i][1]=y;
}
for(int i=1;i<=n;++i)sort(G[i].begin(),G[i].end());
if(m==n-1){P1::solve();return 0;}
P2::solve();
return 0;
}
【题解】NOIP2018 旅行的更多相关文章
- 竞赛题解 - NOIP2018 旅行
\(\mathcal {NOIP2018} 旅行 - 竞赛题解\) 坑还得一层一层的填 填到Day2T1了 洛谷 P5022 题目 (以下copy自洛谷,有删减/修改 (●ˇ∀ˇ●)) 题目描述 小 ...
- 【LG5022】[NOIP2018]旅行
[LG5022][NOIP2018]旅行 题面 洛谷 题解 首先考虑一棵树的部分分怎么打 直接从根节点开始\(dfs\),依次选择编号最小的儿子即可 而此题是一个基环树 怎么办呢? 可以断掉环上的一条 ...
- [题解]NOIP2018(普及组)T1标题统计(title)
NOIP2018(普及组)T1标题统计(title) 题解 [代码(AC)] #include <iostream> #include <cstdio> #include &l ...
- 竞赛题解 - NOIP2018 保卫王国
\(\mathcal{NOIP2018}\) 保卫王国 - 竞赛题解 按某一个炒鸡dalao名曰 taotao 的话说: \(\ \ \ \ \ \ \ \ \ "一道sb倍增题" ...
- 竞赛题解 - NOIP2018 赛道修建
\(\mathcal {NOIP2018}\) 赛道修建 - 竞赛题解 额--考试的时候大概猜到正解,但是时间不够了,不敢写,就写了骗分QwQ 现在把坑填好了~ 题目 (Copy from 洛谷) 题 ...
- NOIP2018 旅行 和 赛道修建
填很久以前的坑. 旅行 给一棵 n 个点的基环树,求字典序最小的DFS序. n ≤ 5000 题解 O(n2) 做法非常显然,枚举断掉环上哪条边然后贪心即可.当然我去年的骚操作只能得88分. O(n ...
- [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞)
题目描述 小$Y$是一个爱好旅行的$OIer$.她来到$X$国,打算将各个城市都玩一遍.小$Y$了解到,$X$国的$n$个城市之间有$m$条双向道路.每条双向道路连接两个城市.不存在两条连接同一对城市 ...
- NOIP2018旅行
这道题考场上的时候暴力写RE了,我果然很菜. 看了一篇大佬的的题解才明白 dalao的题解 但是解释很少哇,为了造福人类,在下发一篇详细一点的题解. 预处理:用vector把与每个点相连的点存起来,排 ...
- [NOIP2018]旅行(数据加强版)(图论+基环树)
数据范围多了2个0就是不一样,O(n^2)只能68分了.(其中60分是n=m+1和原题一样的做法送的),这题直接从NOIP难度变为NOI Plus难度了不说废话直接写题解:首先dfs一遍找到环,然后和 ...
随机推荐
- webdriver入门之环境准备
1.安装ruby 下载ruby的安装包,很简单,不解释.装好之后打开cmd输入以下命令验证是否安装成功 ruby -v 2.安装webdriver 确保机器联网,用gem命令安装是在有网络的情况下进行 ...
- UNITY3D UGUI学习--canvas
首先从canvas的参数说起走. Canvas Component是UI布局和渲染的抽象空间,所有的UI元素都必须在此组件之下. Render Mode UI的渲染方式,有三种: Screen Spa ...
- flex 中间层的高度完全由flex元素决定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python文件.py转换为.exe可执行程序,制作.exe文件图标
当大家想要将自己写的Python程序对别人进行展示的时候,你是否还是打开你的Pycharm进行运行展示? 假如是专业的人士看你的代码,一眼就能看懂你的代码,而其实我们可以不需要给代码,利用pyinst ...
- 把Employees显示在页面上
项目代码下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200429-1.zip 需求:从后台DB取出雇员数据,显示在前台页面上: ...
- 20190923-05Linux用户组管理命令 000 013
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建. 用户组的 ...
- java 将map转为实体类
使用反射将map转为对象,如果不使用反射的话需要一个get一个set写起来麻烦,并且不通用,所以写了一个通用的方法将map集合转为对象,直接看代码,注释也都挺清楚的 public static < ...
- C#中TextBox设置readonly不能读取数据问题
在ASP.NET中前端设置控件TextBox的属性为Readonly="True"时,如果之前有设定初始值,或通过JS方式给其赋值后,在后台访问其Text值却无法获取,这种问题的解 ...
- 如何在不使用OleDbCommandBuilder情况下使用OleDbDataAdapter更新Access数据库记录
我在博客园的博问和微软论坛都曾经请教了这个问题(问题链接),可能我的问题太简单,并没有获得太多解答. 到今天为止,我自己通过查找和摸索,基本把这个问题解决了,还是记录下来,供其他朋友参考. 第一次解决 ...
- pytest测试框架 -- 简介
一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...