luogu题解 P5022 【旅行】
本人的代码可以说洛谷最简单的了
我的存图方式有些与众不同
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 【旅行】的更多相关文章
- 【题解】 P5022旅行
		
[题解]P5022 旅行 当给定你一颗树的时候,这题就是一道送分题,凉心啊! 但是给定你一颗基环树呢? 暴力断环直接跑. 但是数据范围\(n\le 1000\) 乱做就完事了. 考场上这样想的,对于\ ...
 - luogu P2134 百日旅行
		
题目链接 luogu P2134 百日旅行 题解 dp方程好想吧 优化有些玄学惹 不会证.... 不过我会三分和贪心 \滑稽 但还是写dp吧 代码 #include<cstdio> #in ...
 - [luogu P3313] [SDOI2014]旅行
		
[luogu P3313] [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神 ...
 - luogu题解P2312解方程--暴力模+秦九韶
		
题目链接 https://www.luogu.org/problemnew/show/P2312 分析 这道题很毒啊,这么大的数. 但是如果多项式\(\sum_{i=0}^N a[i]*X^i=0\) ...
 - 【luogu P5022 旅行】 题解
		
题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...
 - 洛谷 P5022 旅行——题解
		
发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...
 - 洛谷P5022 旅行 题解 去环/搜索
		
题目链接:https://www.luogu.org/problem/P5022 这道题目一开始看的时候没有思路,但是看到数据范围里面有一个: \(m = n-1\) 或 \(m = n\) ,一下子 ...
 - luogu题解P2502[HAOI2006]旅行--最小生成树变式
		
题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...
 - Luogu P5022 旅行
		
开始写复赛题了 先放张图纪念我惨烈的卡常之路 不说了,简直悲伤 题目链接 思路么..不想写了 Code //不要在意四十行超级加速,卡常用的 #include<bits/stdc++.h> ...
 
随机推荐
- Qt之QSS(QTreeView)
			
check 是选中 前面的指示器的状态 select 是选中 项目 item 的状态. http://blog.csdn.net/u011012932/article/details/52606662
 - 地球坐标-火星坐标-百度坐标及之间的转换算法 C#
			
美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置.但在我国,出于国家安全考虑,国内所有导航电子地图必须使 用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密 ...
 - maven项目或者SpringBoot项目启动时报错在本地仓库中找不到jar包的解决办法
			
经常遇到项目检出来后是导入开发工具eclipse中pom文件出错问题,项目启动时遇到了一些列的jar包找不到的问题,所以换个开发平台到IDEA以为会好些,结果同样的问题还是会出现的,为了找到具体的解决 ...
 - C语言实现常用数据结构——栈
			
#include<stdio.h> #include<stdlib.h> //用链表实现栈 typedef struct Node { int data; struct Nod ...
 - Python socket文件上传下载
			
python网络编程 程序的目录结构 socketDemo ├── client │ ├── cli.py │ └── local_dir │ └── lianxijiangjie.mp4 ...
 - RSA der加密 p12解密以及配合AES使用详解
			
在前面的文章中我有说过AES和RSA这两种加密方式,正好在前段时间再项目中有使用到,在这里再把这两种加密方式综合在一起写一下,具体到他们的使用,以及RSA各种加密文件的生成. 一: RSA各种加密相关 ...
 - vs2017无法启动iis express
			
当遇到vs2017无法启动iis express时,可尝试删除项目下的.vs文件夹,通常可解决问题
 - 你竟然没用 Maven 构建项目?
			
一年前,当我和小伙伴小龙一起做一个外包项目的时候,受到了严重的鄙视.我那时候还不知道 Maven,所以搭建项目用的还是最原始的方式,小龙不得已在导入项目的时候花了很长时间去下载项目依赖的开源类库. 出 ...
 - 可用的NTP服务器地址
			
国内可用的Internet时间同步服务器地址(NTP时间服务器)好在阿里云提供了7个NTP时间服务器也就是Internet时间同步服务器地址 ntp1.aliyun.comntp2.aliyun.co ...
 - 【原创】Docker 搭建Maven私服nexus 3.17初始密码登录不上问题/admin登陆不上问题
			
[原创-转载请说明出处] 博主最近在虚拟机中搭建Maven私服,遇到了一个关键问题就是nexus 3.17版本后初始密码不是admin/admin123. 对于nexus不熟悉的我弄了很长时间!!!心 ...