m=n-1的时候,就直接贪心地dfs就可以

m=n的话,就可以枚举删掉一条边,然后照着m=n-1做

$O(n^2)$大概能过

(然而我眼瞎看不到m<=n)

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pa;
const int maxn=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){
if(c=='-') neg=-;
c=getchar();
}while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M;
int eg[maxn*][],egh[maxn],ect=;
int ans[maxn],del[]; inline void adeg(int a,int b){
eg[++ect][]=b,eg[ect][]=egh[a];egh[a]=ect;
}
bool flag[maxn];
bool dfs(int x,int f){
ans[++ans[]]=x;flag[x]=;
for(int i=egh[x];i;i=eg[i][]){
int b=eg[i][];
if(b==f||(x==del[]&&b==del[])||(x==del[]&&b==del[])) continue;
if(flag[b]) return ;
if(dfs(b,x)) return ;
}return ;
} inline void solve1(){
dfs(,);
for(int i=;i<=N;i++) printf("%d ",ans[i]);
} int lst[maxn];
inline void solve2(){
for(int i=,j;i<=N;i++){
del[]=i;
for(int k=egh[i];k;k=eg[k][]){
del[]=eg[k][];
memset(flag,,sizeof(flag));
ans[]=;
if(dfs(,)) continue;
if(ans[]<N) continue;
bool b=;
for(j=;j<=N;j++){
if(lst[j]==ans[j]) continue;
if(lst[j]&&lst[j]<ans[j]) b=;
break;
}
if(b) memcpy(lst+j,ans+j,*(N-j+));
} }
for(int i=;i<=N;i++)
printf("%d ",lst[i]);
} int main(){
// freopen("travel.in","r",stdin);
// freopen("travel.out","w",stdout);
int i,j,k;
N=rd(),M=rd();
for(i=;i<=M;i++){
int a=rd(),b=rd();
q[a].push(b),q[b].push(a);
}
for(i=;i<=N;i++){
while(!q[i].empty()){
int p=q[i].top();q[i].pop();
adeg(i,p);
}
}
if(M==N-) solve1();
else solve2();
return ;
}

luogu5022 [NOIp2018]旅行 (dfs)的更多相关文章

  1. 【LG5022】[NOIP2018]旅行

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

  2. 竞赛题解 - NOIP2018 旅行

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

  3. NOIP2018 旅行 和 赛道修建

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

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

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

  5. NOIP2018旅行

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

  6. 【比赛】NOIP2018 旅行

    发现 \(m\) 只有两种取值,于是可做了 树的直接贪心 图的枚举环上的边去掉,然后做树的贪心,搜的时候剪一下枝吧 写得有点乱 #include<bits/stdc++.h> #defin ...

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

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

  8. [NOIP2018]旅行

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

  9. 【题解】NOIP2018 旅行

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

随机推荐

  1. windows中在vs code终端使用bash

    vs code Visual Studio Code的缩写,很好用的一个编辑器. 终端 vs code的终端(命令行)在windows中,默认使用的是powershell,如下图所示: powersh ...

  2. 手机移动端input date placehoder不显示

    要解决这个问题,我们可以伪造一个placehoder,通过css跟js来解决这个问题. 为什么要用js的原因是因为当你选择了时间之后,placehoder的文字没有清除掉,所以我们就需要把这个伪造的p ...

  3. vue单页面模板说明文档(1)

    Introduction This boilerplate is targeted towards large, serious projects and assumes you are somewh ...

  4. php单元测试

    https://blog.csdn.net/gaisidewangzhan1/article/details/80347008

  5. Linux 下面RPM 安装的SQLSERVER 修改字符集的方法

    1. 自己还是太low 2. 遇到问题 先 -h 处理 3. 发现登录报错, 怀疑是字符集的问题: 4. 计划是修改字符集 到 自己的环境可用的状态 使用命令 /opt/mssql/bin/mssql ...

  6. VMWARE中NAT下获取不到IP

    1.编辑-虚拟网络编辑器-dhcp设置 2.虚拟机-可移动设备-网络适配器-设置,注意:这里一定要选nat,当初我就是选了桥接,死活上不去,搞了2个小时.

  7. groovy安装 ideal

    参考:https://blog.csdn.net/newbie_907486852/article/details/80879745 (1) 首先下载groovy: https://gradle.or ...

  8. VS Code & MacOS & Zsh

    VS Code & MacOS & Zsh https://code.visualstudio.com/docs/setup/mac solution OK bug $ cat .zs ...

  9. 老男孩python学习自修第五天【集合】

    特点: (1)无序 (2)不重复 使用场景: (1)关系测试 (2)去重 x & y 求交集 x | y 求并集 x - y 求差集 x ^ y 求对称差集 x.intersection(y) ...

  10. css 優先級

    !impoetant:1000 行間樣式 id:100 類選擇器.屬性選擇器和偽類:10 元素及偽元素:1 通配選擇器:0 相同優先級的樣式,後來居上. 當超過256種的時候,瀏覽器會不遵守以上優先級 ...