博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #536 (Div. 2) D. Lunar New Year and a Wander(基础图论)
阅读量:3898 次
发布时间:2019-05-23

本文共 960 字,大约阅读时间需要 3 分钟。

【题目】

【题解】

题意:给你一个n个顶点m条边的无向连通图,沿着边走,每次遇到一个没走过的新顶点就记录下来,让你输出字典序最小的记录方式。给的边会存在多条连接相同两个顶点的情况和自环的情况。

思路:建立邻接表把顶点i的所有邻接点压入vec[i]。字典序最小当然从1开始走,把当前最小可到达点取出来压入队列queue,然后再把当前最小可到达点的所有邻接点插入到set。set有自动排序去重的功能,默认升序,那么第一个元素就是我们要找的下一个最小可到达点,然后记得删除压入queue的第一个元素。重复上述步骤,直到所有顶点都被压入queue,最后按queue顺序输出即可。

【代码】

#include 
using namespace std;const int inf=0x3f3f3f3f;vector
vec[100005];int vis[100005]={0};int main(){ int n,m; scanf("%d%d",&n,&m); while(m--) { int u,v; scanf("%d%d",&u,&v); if(u==v) continue; vec[u].push_back(v); vec[v].push_back(u); } queue
q; set
se; int pos=1,sum=1; vis[pos]=1; q.push(1); while(sum
::iterator it=se.begin(); pos=*it; vis[pos]=1; se.erase(se.begin()); q.push(pos),sum++; } sum=0; while(!q.empty()) { sum++; printf(sum==n?"%d\n":"%d ",q.front()); q.pop(); } return 0;}

 

转载地址:http://pfben.baihongyu.com/

你可能感兴趣的文章
napi
查看>>
_GNU_SOURCE和__USE_GNU的差别
查看>>
Linux 有了 “DTrace”
查看>>
Linux 系统中僵尸进程
查看>>
一个 2 年 Android 开发者的 18 条忠告
查看>>
标志性文本编辑器 Vim 迎来其 25 周年纪念日
查看>>
[小技巧] chrome 的 vim 插件
查看>>
在 Linux 中查看你的时区
查看>>
[小技巧] [trac] Fix AttributeError: 'NullTranslations' object has no attribute 'add'
查看>>
[小技巧] Mac OS X上键盘的键位重映射
查看>>
Java对Oracle中Clob类型数据的读取和写入
查看>>
Spring中Quartz的配置
查看>>
MyBatis 防止 % _ sql 注入攻击 解决方法
查看>>
plsql oracle 无法解析指定的连接标识符
查看>>
Linux后台开发应该具备技能
查看>>
Eclipse Tomcat 无法添加项目
查看>>
SVN更新失败 解决方法
查看>>
关于Java的File.separator
查看>>
linux定时任务的设置
查看>>
MySQL 5.7 完全傻瓜安装教程 图文
查看>>