cf536d——优先队列的运用
题目
题目:Lunar New Year and a Wander
题目大意:给定一个n个顶点(编号1~n)、m条边的图,求从顶点1出发的字典序最小的路径(途径的边可重复)。
思路
使用一个优先队列就足够了。当访问一个节点,我们将与之相连的、未被访问的节点加入队列,每次取优先队列的队首进行访问。即优先队列中存放的是当前所有可到达且未被访问的节点(因为路径可重复)。
时间复杂度:$\mathcal{O}(m \log n)$
代码
priority_queue版
#include<cstdio>
#include<queue>
#include<vector>
using namespace std; typedef long long LL;
const int maxn = + ;
vector<int>e[maxn];
vector<int>seq;
bool vis[maxn];
int n, m;
priority_queue<int, vector<int>, greater<int>>Q; int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i < m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
e[u].push_back(v);
e[v].push_back(u);
}
vis[] = true;
Q.push();
while (!Q.empty())
{
int now = Q.top(); Q.pop();
seq.push_back(now);
for (int i = ; i < e[now].size(); i++)
{
if (!vis[e[now][i]])
{
Q.push(e[now][i]);
vis[e[now][i]] = true;
}
}
}
for (int i = ; i < seq.size(); i++)
printf("%d%c", seq[i], i == seq.size() - ? '\n' : ' ');
return ;
}
set版(set也能排序,且这里节点值不重复)
#include<cstdio>
#include<cstring>
#include<set>
#include<vector>
#include<algorithm>
using namespace std; typedef long long ll;
const int maxn = + ;
int n, m;
vector<int>vec[maxn];
bool visited[maxn]; int main()
{
scanf("%d%d", &n, &m);
for (int i = ;i < m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
vec[u].push_back(v);
vec[v].push_back(u);
}
vector<int>ans;
set<int>st;
st.insert();
for (int i = ; i < n; i++)
{
int u, v;
u = *(st.begin());
ans.push_back(u);
visited[u] = true;
st.erase(u);
for (int j = ; j < vec[u].size(); j++)
{
v = vec[u][j];
if (!visited[v]) st.insert(v);
}
}
int len = ans.size();
for (int i = ; i < len; i++) printf("%d%c", ans[i], i == len - ? '\n' : ' '); return ;
}
参考链接:https://codeforces.com/blog/entry/64928
cf536d——优先队列的运用的更多相关文章
- 堆排序与优先队列——算法导论(7)
1. 预备知识 (1) 基本概念 如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...
- 数据结构:优先队列 基于list实现(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...
- python优先队列,队列和栈
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...
- 数据结构作业——Sanji(优先队列)
山治的婚约 Description 我们知道,山治原来是地下有名的杀人家族文斯莫克家族的三子,目前山治的弟弟已经出现,叫做四治,大哥二哥就叫汪(One)治跟突(Two)治好了(跟本剧情无关) .山治知 ...
- Java优先队列
按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...
- 优先队列实现Huffman编码
首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点 ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
- 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
ギリギリ eye Description A.D.1999,由坠落地球的“谜之战舰”带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼此间的战争,一方面面 ...
随机推荐
- idea导出配置
- js验证form表单示例
js验证form表单示例 检测测试了js表单验证,无jQuery(简单的功能有时无需jQuery版本) js代码如下: <script type="text/javascript& ...
- python 操作memercache类库
pip install python-memcached pip install pymemcache pip install python-libmemcached
- ExtJS Form
form表单中多选框和复选框 Ext.require([ 'Ext.form.*', 'Ext.layout.container.Column', 'Ext.window.MessageBox', ' ...
- 【原创】MapReduce备份Elasticsearch数据到HDFS(JAVA)
一.环境:JAVA8,Elasticsearch-5.6.2,Hadoop-2.8.1二.实现功能:mapreduce读elasticsearch数据.输出parquet文件.多输出路径三.主要依赖 ...
- Keras 文档阅读笔记(不定期更新)
目录 Keras 文档阅读笔记(不定期更新) 模型 Sequential 模型方法 Model 类(函数式 API) 方法 层 关于 Keras 网络层 核心层 卷积层 池化层 循环层 融合层 高级激 ...
- Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925
输入输出格式 输入格式: 仅一行包含一个正整数 NN . 输出格式: 一个整数,表示最右边的非零位的值. 输入输出样例 输入样例#1: 12 输出样例#1: 6 说明 USACO Training S ...
- 如何验证自己的网络是否支持ipv6
http://test-ipv6.com/进入得到自己的ipv6地址 然后命令行 ping 一下
- 关于新手html的认识 以及对table的基本用法
1.html语言 <!DOCTYPE html> 声明html <!--双标签--> <!--<html 属性名="属性值 " 属性名2=&qu ...
- 记一次线上环境的内存溢出(java.lang.OutOfMemoryError)
事故背景 今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下. 一看项目日志今天的都几个g了,平常也就几百兆吧,很明显出了问题. 请求接口后使用命令tail -f ...