[NOIP2018] 旅行 题解
明显要以 \(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] 旅行 题解的更多相关文章
- 竞赛题解 - NOIP2018 旅行
\(\mathcal {NOIP2018} 旅行 - 竞赛题解\) 坑还得一层一层的填 填到Day2T1了 洛谷 P5022 题目 (以下copy自洛谷,有删减/修改 (●ˇ∀ˇ●)) 题目描述 小 ...
- 【LG5022】[NOIP2018]旅行
[LG5022][NOIP2018]旅行 题面 洛谷 题解 首先考虑一棵树的部分分怎么打 直接从根节点开始\(dfs\),依次选择编号最小的儿子即可 而此题是一个基环树 怎么办呢? 可以断掉环上的一条 ...
- 【题解】NOIP2018 旅行
题目戳我 \(\text{Solution:}\) 首先题目描述有一点不准确:回头是必须要走完一条路无路可走的时候才能返回. 对于树的情况:显然贪心做就完事了. 对于基环树的情况:对于一个\(n\)条 ...
- noip2012开车旅行 题解
题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选 ...
- NOIP2018 旅行 和 赛道修建
填很久以前的坑. 旅行 给一棵 n 个点的基环树,求字典序最小的DFS序. n ≤ 5000 题解 O(n2) 做法非常显然,枚举断掉环上哪条边然后贪心即可.当然我去年的骚操作只能得88分. O(n ...
- [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞)
题目描述 小$Y$是一个爱好旅行的$OIer$.她来到$X$国,打算将各个城市都玩一遍.小$Y$了解到,$X$国的$n$个城市之间有$m$条双向道路.每条双向道路连接两个城市.不存在两条连接同一对城市 ...
- 洛谷 P5022 旅行——题解
发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...
- NOIP2018旅行
这道题考场上的时候暴力写RE了,我果然很菜. 看了一篇大佬的的题解才明白 dalao的题解 但是解释很少哇,为了造福人类,在下发一篇详细一点的题解. 预处理:用vector把与每个点相连的点存起来,排 ...
- [NOIP2018]旅行(数据加强版)(图论+基环树)
数据范围多了2个0就是不一样,O(n^2)只能68分了.(其中60分是n=m+1和原题一样的做法送的),这题直接从NOIP难度变为NOI Plus难度了不说废话直接写题解:首先dfs一遍找到环,然后和 ...
- [NOIP2018]旅行
嘟嘟嘟 鉴于一些知道的人所知道的,不知道的人所不知道的原因,我来发NOIPday2T1的题解了. \(O(n ^ 2)\)的做法自然很暴力,枚举断边断环为链就行了. 所以我是来讲\(O(nlogn)\ ...
随机推荐
- 如何使用blender生成城市群
在我们做数字孪生相关的项目的时候,会需要生成一些城市的模型,这时候我们可以使用 blender 来生成一些城市的模型. 我们,先来看一下效果. 安装 blender blender 是一个开源的 3D ...
- 攻防世界:web习题之disabled_button
攻防世界:web习题之disabled_button 题目内容 https://adworld.xctf.org.cn/challenges/list 打开网页会发现有一个无法点击的按钮 思路 查看该 ...
- Fleck:一个轻量级的C#开源WebSocket服务端库
推荐一个简单易用.轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发. 01 项目简介 Fleck 是一个用 C# 编写的轻量级 WebSocket 服务器库.它提供 ...
- MeteoInfo-Java解析与绘图教程(二)
MeteoInfo-Java解析与绘图教程(二) 上节说到了数据的简单解析,这节则说简单绘图 绘图的前置最重要的就是GridData,有了它,基本可以直接绘制出来 例如我们先放弃简单的自定义绘图的操作 ...
- node-koa2 微信支付-企业付款到银行卡
微信支付用的V2版本 微信支付说明文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay_yhk.php?chapter=24_2 参数详细 ...
- Flutter Package: retry
Flutter package: retry 传送门 This package provides an easy way to retry asynchronous functions. This i ...
- jdk安装-windows和linux
下载:见此博客https://www.cnblogs.com/zn19961006/p/12857930.html 一.windows安装 1.很简单,运行exe,然后一直下一步 选安装路径. 注意: ...
- Argocd基于网络的终端
https://argo-cd.readthedocs.io/en/stable/operator-manual/web_based_terminal/ 官网参考: https://argo-cd ...
- re模块:核心函数和方法
1.compile(pattren,flages=0) 使用任何可选的标记来编译正则表达式的模式然后返回一个正则表达式对象 2.match(pattern,string,flags=0) 尝 ...
- Qt/C++地图高级绘图/指定唯一标识添加删除修改/动态显示和隐藏/支持天地图高德地图百度地图
一.前言说明 已经有了最基础的接口用来添加覆盖物,而且还有通过进入覆盖物模式动态添加覆盖物的功能,为什么还要来个高级绘图?因为又有新的需求,给钱就搞,一点底线都没有.无论哪个地图厂家,提供的接口都是没 ...