正题

题目链接:https://www.luogu.com.cn/problem/AT2368


题目大意

给出 nnn 个点 mmm 条边的一张无向图,然后求一条路径满足

  • 路径长度不小于二。
  • 路径无交。
  • 对于所有的 xxx 与路径的端点相连,那么 xxx 在路径上。

1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105


解题思路

还是利用到那个经典的性质,就是dfsdfsdfs树上所有非树边都是返祖边。

首先如果dfsdfsdfs树的根只有一条出边那么以这个点为起点到达任意一个叶子都是合法的。

但是如果有两个或者以上的出边,我们可以连接两个叶子就好了。

时间复杂度:O(n)O(n)O(n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+10;
struct node{int to,next;
}a[N<<1];
int n,m,tot,lf,ls[N],v[N],fa[N];
queue<int> q;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
int dfs(int x){int z=0;v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(v[y])continue;fa[y]=x;dfs(y);z++;}if(!z)lf=x;return z;
}
void path(int x,bool flag){v[x]=1;q.push(x);if(fa[x]&&flag){path(fa[x],1);return;}for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(v[y])continue;path(y,0);break;}return;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dfs(1);memset(v,0,sizeof(v));path(lf,1);printf("%d\n",q.size());while(!q.empty())printf("%d ",q.front()),q.pop();return 0;
}

AT2368-[AGC013B]Hamiltonish Path【构造】相关推荐

  1. 【python开发】构造一个可以查看,填加和返回的字典

    当我们在面对一个字典的时候,基本功能有查找,填加,和返回上一级,我们利用上一篇的字典,写了一个可以实现字典基本功能的小程序: #!/usr/bin/env python # -*- coding:ut ...

  2. Java中getResourceAsStream的用法

    Java中getResourceAsStream的用法 首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String p ...

  3. java org.jb2011报错_Java中getResourceAsStream()用法总结(转)

    Java中getResourceAsStream的用法 首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String p ...

  4. android绘制心形_Android自定义View系列(一)——打造一个爱心进度条

    写作原因:Android进阶过程中有一个绕不开的话题--自定义View.这一块是安卓程序员更好地实现功能自主化必须迈出的一步.下面这个系列博主将通过实现几个例子来认识安卓自定义View的方法.从自定义 ...

  5. 我的Java开发学习之旅------JAVA 笔记ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别...

    今天,一读者在我的 Android通过调用Webservice实现手机号码归属地查询 文章中给我回复了一个问题,由于没有具体说明我的sop12.xml文件是放在src目录下,不是和具体操作类Addre ...

  6. Java中getResourceAsStream的用法小结

    2019独角兽企业重金招聘Python工程师标准>>> Java中getResourceAsStream的用法小结 一.Java中的getResourceAsStream主要有以下三 ...

  7. node.js实现图片上传(包含缩略图)

    图片上传 使用multiparty插件实现上传 安装multiparty npm i --save multiparty 代码实现 const multiparty = require('multip ...

  8. resourceAsStream

    2019独角兽企业重金招聘Python工程师标准>>> getResourceAsStream的用法 Class.getResourceAsStream(String path): ...

  9. Boost::filesystem的使用笔记

    Boost::filesystem 使用小笔记 http://blog.csdn.net/dourgulf/article/details/8589207 boost 官方文档:http://en.h ...

最新文章

  1. ASP.NET Core EFCore 之Code First
  2. python教程:apscheduler模块使用教程
  3. boost::gil模块数字扩展中的 resize_view() 示例
  4. BZOJ 3237: [Ahoi2013]连通图
  5. SQLServer 生成当前日期备份
  6. swft c 语言 数组,如何在swift中实现数组的深拷贝
  7. 2007年noip普及组初赛试题
  8. css3 menu 手机菜单3
  9. 在工作中你卑微到什么程度?
  10. linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号
  11. [再学Python] - 面向对象的程序设计- 对象和类
  12. linux系统怎样挂载虚拟盘,linux 应用盘(从盘)挂载方法linux操作系统 -电脑资料...
  13. CHIP-seq流程学习笔记(11)-使用GSEA软件进行GSEA分析
  14. C# 实现对三维点数据的 显示
  15. MAC版SecureCRT+SecureFX 安装说明
  16. UVa 11137 - Ingenuous Cubrency
  17. Mybatis查询之list作为参数查询
  18. EN 13329强化木地板规范要求和试验方法
  19. dex是什么的缩写,游戏中str是什么的缩写《游戏人物的属性STR AGI VIT INT DEX CON WIS LUK各是什么意思啊?》...
  20. 北京六天十次面试,已拿到offer,面试题和总结分享(Java岗)

热门文章

  1. java合并list_怎么把两个list合并
  2. dbeaver 数据转化 mapping_Python机器学习实例:数据竞赛-足球运动员身价估计
  3. ef 关联依赖属性_基础巩固之:xmlns属性梳理
  4. python离群点检测_如何从熊猫DataFrame中检测峰点(离群值)
  5. 2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程
  6. 算法设计与分析——分治与递归策略——hanoi问题
  7. 台式计算机听音乐,配置一台4000元的台式电脑,主要用于日常办公及上网查资料,听音乐,看电影及学习....
  8. [C++11]字符串原始字面量
  9. Rx2.0后台开发分享
  10. mysql stack is full_mysql优化之表的优化与列类型选择