明显要以 \(1\) 为起点。

原图是树

这种情况下,走路不能回头,只能用 \(dfs\) 的思路走。当然肯定每次都走较小的那棵子树,\(vector\) 存图后排序即可达到这种效果。

时间复杂度 \(O(n\log m)\)。

原图是基环树

明显可以分别考虑将所有边断掉后的情况,取字典序最小的。

时间复杂度 \(O(nm)\)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5005;
int n,m,vis[N],u[N],v[N];
int k,c,d,ans[N],b[N],f;
vector<int>g[N];
void dfs(int x){
b[++k]=x;
if(ans[k]>b[k]) f=1;
if(ans[k]<b[k]&&!f){
f=-1;
return;
}
vis[x]=1;
for(int i=0;i<g[x].size();i++){
int y=g[x][i];
if(x==c&&y==d) continue;
if(x==d&&y==c) continue;
if(!vis[y]) dfs(y);
if(f==-1) return;
}
}int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i];
g[u[i]].push_back(v[i]);
g[v[i]].push_back(u[i]);
}for(int i=1;i<=n;i++)
sort(g[i].begin(),g[i].end());
memset(ans,0x3f,sizeof(ans));
if(m==n-1){
dfs(1);
for(int i=1;i<=k;i++)
cout<<b[i]<<" ";
return 0;
}for(int i=1;i<=m;i++){
memset(vis,0,sizeof(vis));
memset(b,0x3f,sizeof(b));
f=k=0;c=u[i];d=v[i];
dfs(1);if(k<n) continue;
for(int j=1;j<=n;j++)
ans[j]=b[j];
}for(int j=1;j<=n;j++)
cout<<ans[j]<<" ";
return 0;
}

[NOIP2018] 旅行 题解的更多相关文章

  1. 竞赛题解 - NOIP2018 旅行

    \(\mathcal {NOIP2018} 旅行 - 竞赛题解\) 坑还得一层一层的填 填到Day2T1了 洛谷 P5022 题目 (以下copy自洛谷,有删减/修改 (●ˇ∀ˇ●)) 题目描述 小 ...

  2. 【LG5022】[NOIP2018]旅行

    [LG5022][NOIP2018]旅行 题面 洛谷 题解 首先考虑一棵树的部分分怎么打 直接从根节点开始\(dfs\),依次选择编号最小的儿子即可 而此题是一个基环树 怎么办呢? 可以断掉环上的一条 ...

  3. 【题解】NOIP2018 旅行

    题目戳我 \(\text{Solution:}\) 首先题目描述有一点不准确:回头是必须要走完一条路无路可走的时候才能返回. 对于树的情况:显然贪心做就完事了. 对于基环树的情况:对于一个\(n\)条 ...

  4. noip2012开车旅行 题解

    题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选 ...

  5. NOIP2018 旅行 和 赛道修建

    填很久以前的坑. 旅行 给一棵 n 个点的基环树,求字典序最小的DFS序. n ≤ 5000 题解 O(n2) 做法非常显然,枚举断掉环上哪条边然后贪心即可.当然我去年的骚操作只能得88分. O(n ...

  6. [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞)

    题目描述 小$Y$是一个爱好旅行的$OIer$.她来到$X$国,打算将各个城市都玩一遍.小$Y$了解到,$X$国的$n$个城市之间有$m$条双向道路.每条双向道路连接两个城市.不存在两条连接同一对城市 ...

  7. 洛谷 P5022 旅行——题解

    发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...

  8. NOIP2018旅行

    这道题考场上的时候暴力写RE了,我果然很菜. 看了一篇大佬的的题解才明白 dalao的题解 但是解释很少哇,为了造福人类,在下发一篇详细一点的题解. 预处理:用vector把与每个点相连的点存起来,排 ...

  9. [NOIP2018]旅行(数据加强版)(图论+基环树)

    数据范围多了2个0就是不一样,O(n^2)只能68分了.(其中60分是n=m+1和原题一样的做法送的),这题直接从NOIP难度变为NOI Plus难度了不说废话直接写题解:首先dfs一遍找到环,然后和 ...

  10. [NOIP2018]旅行

    嘟嘟嘟 鉴于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIPday2T1的题解了. \(O(n ^ 2)\)的做法自然很暴力,枚举断边断环为链就行了. 所以我是来讲\(O(nlogn)\ ...

随机推荐

  1. C++之OpenCV入门到提高006:图像混合

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>的第六篇文章.这篇文章也不难,介绍如何图像的混合操作.图像本质上也是数据,既然是数据,我们就可以针对两张或者多张图片进行加.减 ...

  2. AE对象序列化

    当我们编写AE程序时,通常会遇到需要存储某个AE对象的情况,比如Layer,Element,Map,Legend,NorthArrow等等这些.举个例子说明一下:在我们编辑Featurelayer时, ...

  3. vtkDelaunay2D 错误 Edge not recovered, polygon fill suspect

    vtkDelaunay2D 在设定SetSourceData边界处理凹多边形时,不稳定,有概率会出现"Edge not recovered, polygon fill suspect&quo ...

  4. 解决编译redis报错zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory

    编译redis时报错:zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file or directory,执行: # sudo m ...

  5. Java中MessageFormat的坑

    目录 Java中MessageFormat的坑 问题现象 问题排查 如何解决 Java中MessageFormat的坑 问题现象 某个业务功能需要通过SSH协议执行命令查询一些数据,而某次查询居然没有 ...

  6. Qt开发经验小技巧221-225

    在对表格数据模型操作的时候,经常遇到一种场景就是,删除某条记录后,希望重新选中某一行.QTableView.QTableWidget本身就支持多选全选等操作,比如批量删除可以多选. //拿到表格数据模 ...

  7. Qt开源作品27-鼠标定位十字线

    一.前言 上次有个群友在咨询这个问题,如何用Qt绘制一个鼠标定位的十字线,花了两分钟整了个,最没有含金量的一个demo,就是用drawline绘制了两条线,这个效果在经典的CAD软件中很常用,还有一些 ...

  8. Qt开源作品19-通用数据库翻页查询

    一.前言 在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显 ...

  9. Qt音视频开发18-海康sdk回调

    一.前言 海康sdk显示实时视频流除了支持句柄方式以外,也支持回调的方式拿到每一张图片自己绘制处理,当然回调除了拿到视频数据,其实音频数据也一块拿到了,自行调用音频设备播放就行,关于海康sdk回调这块 ...

  10. Mac系统Obsidian和Typora更换霞鹜文楷字体

    在github上发现了一款非常好看的字体LXGW WenKai / 霞鹜文楷,这里记录下Mac电脑如何安装这个字体,以及我用到的笔记软件更换字体的过程. Mac安装字体 # 增加代理,不加代理下载速度 ...