STL+优先队列

 1 #include<iostream>
 2 #include<queue>
 3 #include<string.h>
 4 using namespace std;
 5 const int INF =100000000;
 6 const int MAXN =1000;
 7 const int MAXM =100000;
 8 int m,n;
 9 int first[MAXN],d[MAXN];
10 int u[MAXM],v[MAXM],w[MAXM],next[MAXM];
11 typedef pair<int ,int >pii;//STL中的pair便是专门把两个类型捆绑在一起。便于关联数据的输出与提取
12 priority_queue<pii ,vector<pii>,greater<pii> > q;//创建优先队列,这是自己定义的优先队列排序函
13 int main()
14 {
15    cin>>m>>n;
16    for(int e=0;e<m;e++)
17    {
18         cin>>u[e]>>v[e]>>w[e];
19         next[e]=first[u[e]];//这里是把第e条边的起点所对应的第一条边的值赋给e的下一条边
20         first[u[e]]=e; //并把第e条边的起点的第一条边设置为e
21    }
22    bool done[MAXN];
23    for(int i=0;i<n;i++)
24    d[i]=(i==0?0:INF);
25    memset(done,0,sizeof(memset));
26    q.push(make_pair(d[0],0));//将第一条数据压入优先队列
27    while(!q.empty())
28    {
29        pii u=q.top();
30        q.pop();
31        int x =u.second;//获得节点号,u.first是d[i]
32        if(done[x]) continue;
33        done[x]=1;
34        for(e=first[x];e!=-1;e=next[e])
35        {
36            if(d[v[e]]>d[x]]+w[e])
37            d[v[e]]=d[x]]+w[e];
38            q.push(make_pair(d[v[e]],v[e])); //如果未被访问,则压入优先队列
39        }
40
41    }
42    for(int i=0;i<MAXN;i++)
43    cout<<d[i]<<endl;
44    return 0;
45 }

STL+优先队列

时间: 2024-10-04 07:08:41

STL+优先队列的相关文章

poj3253 Fence Repair STL优先队列

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://poj.org/problem?id=3253 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each

ZOJ2724_Windows Message Queue(STL/优先队列)

解题报告 题意: 看输入输出就很明白. 思路: 优先队列. #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <map> using namespace std; struct node

STL 优先队列的自定义比较函数与 sort() 等泛型算法的自定义比较函数的区别

前言 最近在刷算法题,常常需要自定义比较函数作为作为函数对象送入 stl 中,遇到了下面的问题: 泛型算法 sort() 的比较函数是这么写: //sort() 实现元素间关系为递增的比较函数 struct cmp{ bool operator () (const T& a, const T& b) const { return a.x < b.x; } }; //或者这样bool operator < (const T& a, const T& b) cons

UVA - 136 Ugly Numbers(丑数,STL优先队列+set)

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ... shows the first 11 ugly numbers. By convention, 1 is included. Write a program to find and print the 1500'th ugly number. Input Ther

STL优先队列的使用

STL中有一个优先队列的容器可以使用. [头文件] queue 队列容器 vector 向量容器 [操作] 优先级队列支持的操作 q.empty()         如果队列为空,则返回true,否则返回false q.size()            返回队列中元素的个数 q.pop()             删除队首元素,但不返回其值 q.top()             返回具有最高优先级的元素值,但不删除该元素 q.push(item)     在基于优先级的适当位置插入新元素 1

STL优先队列详解

优先队列 优先队列是一种抽象数据类型(Abstract Date Type,ADT),行为和队列类似,但是先出队的元素不是先进队列的元素,而是队列中优先级最高的元素. STL的优先队列定义在头文件<queue>和 (队列一样),用"priority_queue<int>pq"来声明: 最基本的用法 定义:priority_queue<int>pq: 操作: pq.empty() 如果队列为空返回真 pq.pop() 删除对顶元素 pq.push()

stl 优先队列(堆)

[模板]堆 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含一个整数N,表示操作的个数 接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下: 操作1: 1 x 操作2: 2 操作3: 3 输出格式: 包含若干行正整数,每行依次对应一个操作2的结果. 输入输出样例 输入样例#1: 5 1 2 1 5 2 3 2 输出样例#1:

C++STL——优先队列

一.相关定义 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列里的元素进行了由大到小的顺序排序.元素的比较规则默认按元素值由大到小排序,可以重载"<"操作符来重新定义比较规则. 优先级队列可以用向量(vector)或双向队列(deque)来实现(注意list container不能用来实现queue,因为list的迭代器不是任意存

c++ STL 优先队列

操作1: 新建一个优先队列: ps:该操作需要包含头文件queue priority_queue < int , vector<int> , greeter <int> > t1; priority_queue < int , vector<int> , less <int> > t2; 解释: 接下来对解释一下新建时的三个参数: 其中第一个参数为优先队列的数据类型,可以是int,double之类的 其中第二个参数是指用什么容器来储存