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

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

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. Wp8 Popup不随输入法偏移问题解决方案

    在wp中我们经常要实现,浮窗的效果这时我们就会考虑到Popup,但是在用Popup开发我们会遇到一个非常尴尬的问题,由于Popup不在主界面的可视化树内,在Popup显示的位置在输入法面板出现的范围时 ...

  2. 使用C++还是QML(QML容易使用和维护,效果好)

    本质上,Qt 是一个C++类库.在引入 QML 以前,所有的开发都是基于 C++ 的,但到了 Qt 5,QML 和 Qt Quick 成为了 Qt 的核心之一,导致很多初学者在犹豫是否还需要学习 C+ ...

  3. Qt设置窗体的透明度: setWindowOpacity

    在Qt中,设置窗体透明度的函数有:void   setWindowOpacity(qreal level)   特性: 透明度的有效范围从1.0(完全不透明)到0.0(完全透明的). 默认情况下,此属 ...

  4. Java对象结构及HotSpot对象模型

    一.对象结构 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).下图是普通对象实例与数组对象 ...

  5. 敏捷开发中如何做好Sprint规划?

    什么是Sprint规划? Sprint规划是scrum中用来启动Sprint的事件.迭代规划的目标是定义Sprint可以交付的内容,以及如何完成各项工作.迭代规划需要整个scrum团队合作完成. 与体 ...

  6. Kafka笔记3

    向Kafka写入消息从创建一个ProducerRecord对象开始,ProducerRecord需要包含目标主题和要发送的内容,我们还可以指定键或分区,在发送ProducerRecord对象时,生产者 ...

  7. hgoi#20190519

    更好的阅读体验 来我的博客观看 T1-求余问题 Abu Tahun很喜欢回文. 一个数组若是回文的,那么它从前往后读和从后往前读都是一样的,比如数组{1},{1,1,1},{1,2,1},{1,3,2 ...

  8. DHCP命令执行CVE-2018-1111漏洞复现

    DHCP命令执行_CVE-2018-1111漏洞复现 一.漏洞描述 在Red Hat Enterprise Linux多个版本的DHCP客户端软件包所包含的NetworkManager集成脚本中发现了 ...

  9. URL收集

    window下 php5.5 安装pthread扩展:http://blog.csdn.net/aoyoo111/article/details/19020161

  10. iOS开发(4):录音AVAudioRecorder

    录音,声音的采集,一般有两种实现办法,一是使用AVAudioRecorder,一是使用AudioUnit.如果只是简单的录音,使用AVAudioRecorder就可以了,如果想更灵活地处理刚录到的声音 ...