基于STL的队列略解
什么是STL
以下内容摘自这儿。
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
队列
队列 是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的STL实现
声明队列需要加载头文件
#include<queue>
#include<algorithm>
使用 std 名字空间
using namespace std;
定义一个存储 int
类型的队列 q
queue<int> q;
使用STL的缺点,就是常数大。
下面我们以 luoguP3371\text{luoguP3371}luoguP3371为例,讲解 queue
的具体调用方法。
题目描述 luoguP3371\text{luoguP3371}luoguP3371
一张有向边权图 GGG 中,给定一点 STSTST,求 STSTST 到其他各点的最短路径长。
Solution 3371\text{Solution 3371}Solution 3371
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define reg register
using namespace std;
struct node{
int x,y,d,next;
}e[500010];
int len=0;
int first[10010];
int n,m,ST;
queue<int> q;
bool v[10010];
int s1,s2,s3;
int f[10010];
void ins(int x,int y,int d){
e[++len].x=x;e[len].y=y;e[len].d=d;
e[len].next=first[x];first[x]=len;
}
int main(){
scanf("%d%d%d",&n,&m,&ST);
for(reg int i=1;i<=m;++i){
scanf("%d%d%d",&s1,&s2,&s3);
ins(s1,s2,s3);
}
memset(v,1,sizeof(v));v[ST]=0;
memset(f,63,sizeof(f));f[ST]=0;
q.push(ST); //将ST压入队列
while(!q.empty()){
int x=q.front(); //取出队首的元素
for(reg int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(f[y]>f[x]+e[i].d){
f[y]=f[x]+e[i].d;
if(v[y]){
v[y]=0;
q.push(y); //将y压入队列
}
}
}
q.pop(); //弹出队尾元素
v[x]=1;
}
for(reg int i=1;i<=n;++i)
printf("%d ",f[i]==1061109567?2147483647:f[i]);
}
基于STL的队列略解的更多相关文章
- 基于STL的堆略解
什么是STL 以下内容摘自这儿. STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Le ...
- STL的vector略解
本文部分内容参考于这儿. vector 的基础知识,上文已经阐述地很详尽了.笔者谨给出 vector 的声明及其常用函数. 代码抬头需包含 #include<vector> using n ...
- 数据结构图文解析之:队列详解与C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- java多线程:java队列详解
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- STL中队列(queue)的使用方法
STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- 基于模型的特征选择详解 (Embedded & Wrapper)
目录 基于模型的特征选择详解 (Embedded & Wrapper) 1. 线性模型和正则化(Embedded方式) 2. 基于树模型的特征选择(Embedded方式) 3. 顶层特征选择算 ...
随机推荐
- idea解决This file is indented with tabs instead of 4 spaces
idea上面总是弹出 解决方法: File -> Settings -> Editor -> Code Style -> Java -> Tabs and Indents ...
- Guava的RateLimiter实现接口限流
最近开发需求中有需要对后台接口进行限流处理,整理了一下基本使用方法. 首先添加guava依赖: <dependency> <groupId>com.google.guava&l ...
- Redis 的底层数据结构(字典)
字典相对于数组,链表来说,是一种较高层次的数据结构,像我们的汉语字典一样,可以通过拼音或偏旁唯一确定一个汉字,在程序里我们管每一个映射关系叫做一个键值对,很多个键值对放在一起就构成了我们的字典结构. ...
- Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06
目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Re ...
- Hadoop 之 HDFS基本概念
1.HDFS的基本概念 答:块(Block).NameNode.DataNode.HDFS的文件被分成块进行存储,默认块的大小为64M,所以说块是文件存储和处理的逻辑单元.NameNode是管理节点, ...
- [Code] 大蛇之数据工程
作为“所谓码农”的首篇,本章内容理应涵盖基本编程技法. Python这个东西.简洁,作为载体,是个不错的选择呦. 链接资源: Python文档:https://docs.python.org/3/ 教 ...
- js控制滚动条在内容更新超出时自动滚到底部
//滚动条在内容更新时自动滚到底部var message = document.getElementById('message');message.scrollTop = message.scroll ...
- Spring Boot 配置元数据指南
1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的.但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot C ...
- Python学习笔记整理总结【Django】【MVC/MTV/路由分配系统(URL)/视图函数 (views)/表单交互】
一.Web框架概述 Web框架本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python # -*- coding:utf-8 ...
- RocketMQ学习 -> NameServer路由中心
RocketMQ项目代码核心目录说明 broker:broker启动进程 client:消息客户端,包含消息生产者,消息消费者相关类 common:公共包 dev:开发者信息(非源代码) distri ...