本人的代码可以说洛谷最简单的了

我的存图方式有些与众不同

a[5000][5000]中第一个下标表示第几个点,第二个表示与点相连的点

虽然比前向星废内存但时间极快,大概是O(n)的。

现在步入正题

60分代码思路

用深搜查找最小路径很简单

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[5005][5005],lj[5005]={0},c[5005]={0},s=0,fs=1,h[5005]={0},huan=0,dd=0,b[5009][5009];
int cmp(int aa,int bb)
{
return a[aa]<a[bb];
}
void dfs(int x)
{
c[x]++;
if(s==1)return ;
if(fs==n)
{
printf("\n");
s=1;
return ;
}
for(int i=1;i<=lj[x];i++)
{
if(c[a[x][i]]==0)
{
printf("%d ",a[x][i]); fs++;
dfs(a[x][i]);
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int aa,bb;
scanf("%d%d",&aa,&bb);
lj[aa]++;
lj[bb]++;
a[aa][lj[aa]]=bb;
a[bb][lj[bb]]=aa;
b[aa][bb]=1; }
for(int i=1;i<=n;i++)
sort(a[i]+1,a[i]+lj[i]+1,cmp);
printf("1 ");
if(m==n-1)
dfs(1);
return 0;
}

至于满分还需要n==m的情况

100分思路

先判断环

将环找出

做好标记

再深搜在环上判断

情况有很多详见代码

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[5005][5005],lj[5005]={0},c[5005]={0},s=0,fs=1,h[5005]={0},huan=0,dd=0,b[5009][5009];
int cmp(int aa,int bb)
{
return a[aa]<a[bb];
}
void dfs(int x)
{
c[x]++;
if(s==1)return ;
if(fs==n)
{
printf("\n");
s=1;
return ;
}
for(int i=1;i<=lj[x];i++)
{
if(c[a[x][i]]==0)
{
printf("%d ",a[x][i]); fs++;
dfs(a[x][i]);
}
}
}
void dfs1(int x)
{
c[x]++;
if(s==1)return ;
if(c[x]==2)
{
h[x]=1; huan=x;
return ;
}
for(int i=1;i<=n;i++)
{
if((b[x][a[x][i]]==1||b[a[x][i]][x]==1)&&huan==0)
{
b[x][a[x][i]]=b[a[x][i]][x]=0;
dfs1(a[x][i]);
if(huan!=0&&huan!=x&&s!=1)h[x]=1;
if(huan==x)s=1;
}
}
}
int dyc=0,huandedazhi=1000000,ag=0,hhl=0,bxyjz=0;
int zb=100000;
void ac(int x)
{
c[x]++;
if(s==1)return ;
if(fs==n)
{
printf("\n");
s=1;
return ;
} if(x==huan&&dyc==0)
{
dyc=1;
int h1=0,h2;
for(int i=1;i<=lj[x];i++)
{
if(h[a[x][i]]==1)
{
if(h1==0)h1=a[x][i];
else h2=a[x][i];
}
}
huandedazhi=max(h1,h2);
zb=huandedazhi;
}
if(x==huandedazhi)ag=11;
for(int i=1;i<=lj[x];i++)
{ if(c[a[x][i]]==0)
{
if(h[a[x][i]]==0)
{
printf("%d ",a[x][i]); fs++; ac(a[x][i]);
}
if(h[a[x][i]]==1)
{
if(a[x][i+1]!=0&&(a[x][i]<huandedazhi||ag==0)&&h[a[x][i+1]]==0&&h[x]==1)
zb=a[x][i+1];
if(a[x][i]>zb&&ag==0)
{
ag=1;
} else
{
printf("%d ",a[x][i]); fs++; ac(a[x][i]);
} }
} } }
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int aa,bb;
scanf("%d%d",&aa,&bb);
lj[aa]++;
lj[bb]++;
a[aa][lj[aa]]=bb;
a[bb][lj[bb]]=aa;
b[aa][bb]=1; }
for(int i=1;i<=n;i++)
sort(a[i]+1,a[i]+lj[i]+1,cmp);
printf("1 ");
if(m==n-1)
dfs(1);
if(m==n)
{
dfs1(1);
for(int i=1;i<=n;i++)c[i]=0;s=0;
ac(1);
}
}

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

  1. 【题解】 P5022旅行

    [题解]P5022 旅行 当给定你一颗树的时候,这题就是一道送分题,凉心啊! 但是给定你一颗基环树呢? 暴力断环直接跑. 但是数据范围\(n\le 1000\) 乱做就完事了. 考场上这样想的,对于\ ...

  2. luogu P2134 百日旅行

    题目链接 luogu P2134 百日旅行 题解 dp方程好想吧 优化有些玄学惹 不会证.... 不过我会三分和贪心 \滑稽 但还是写dp吧 代码 #include<cstdio> #in ...

  3. [luogu P3313] [SDOI2014]旅行

    [luogu P3313] [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神 ...

  4. luogu题解P2312解方程--暴力模+秦九韶

    题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...

  5. 【luogu P5022 旅行】 题解

    题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...

  6. 洛谷 P5022 旅行——题解

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

  7. 洛谷P5022 旅行 题解 去环/搜索

    题目链接:https://www.luogu.org/problem/P5022 这道题目一开始看的时候没有思路,但是看到数据范围里面有一个: \(m = n-1\) 或 \(m = n\) ,一下子 ...

  8. luogu题解P2502[HAOI2006]旅行--最小生成树变式

    题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...

  9. Luogu P5022 旅行

    开始写复赛题了 先放张图纪念我惨烈的卡常之路 不说了,简直悲伤 题目链接 思路么..不想写了 Code //不要在意四十行超级加速,卡常用的 #include<bits/stdc++.h> ...

随机推荐

  1. Hyperledger Fabric1.4的多机部署

    之前的文章深入解析Hyperledger Fabric启动的全过程主要讲解了Fabric的网络搭建,以及启动的整体流程,但是都是通过单机完成的.而区块链本身就是去中心化的,所以最终还是要完成Fabri ...

  2. Mybatis_two

    SqlMapConfig.xml配置文件 SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) ...

  3. WebRTC开发者必备 | 《WebRTC1.0: 浏览器间实时通讯》中文版免费下载

    随着移动互联网的崛起与完善,WebRTC的应用场景相较于它刚诞生时已经有了极大的变化,以图片和视频为代表的流媒体技术走向普及,交互式网站也逐渐成为互联网的新常态,因此WebRTC API应该把当前以及 ...

  4. Hadoop 学习之路(一)—— 分布式文件系统 HDFS

    一.介绍 HDFS (Hadoop Distributed File System)是Hadoop下的分布式文件系统,具有高容错.高吞吐量等特性,可以部署在低成本的硬件上. 二.HDFS 设计原理 2 ...

  5. spring cloud 系列第5篇 —— hystrix+turbine 服务的熔断与监控 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.hystrix 简介 1.1 熔断器 在分布式系统中,由于服务之间相互 ...

  6. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  7. dubbo整合springboot最详细入门教程

    说明 目前互联网公司,大部分项目都是基于分布式,一个项目被拆分成几个小项目,这些小项目会分别部署在不同的计算机上面,这个叫做微服务.当一台计算机的程序需要调用另一台计算机代码的时候,就涉及远程调用.此 ...

  8. VirtualBox基础使用

    VirtualBox基础使用 VirtualBox相对VMware来说是轻量级的虚拟软件, 最关键的是VirtualBox是开源免费的. 配置全局选项 点击管理-->全局设定, 进入设置界面. ...

  9. 记一次linux通过jstack定位CPU使用过高问题或排查线上死锁问题

    一.java定位进程 在服务器中终端输入命令:top 可以看到进程ID,为5421的cpu这列100多了. 记下这个数字:5421 二.定位问题进程对应的线程 然后在服务器中终端输入命令:top -H ...

  10. 看看大神 Paul Graham 对如何学习编程的回答

    前言 我翻阅自己之前写的博客文章,发现在 2015 年我刚开始学习编程的时候,翻译了一段 Paul Graham 关于"How can I learn to program?"的回 ...