c++优先队列,小根堆
来源:互联网 发布:手机卡iphone7在线软件 编辑:程序博客网 时间:2024/06/06 03:36
一直对priority不会,现在要记一下了
priority_queue<int,vector<int>,greater<int> >q;
这样的话,我们可以得到一个小根堆;
意思大概是<类型,<存储方式>,<比较函数> >;
但是这个小根堆只能支持int;
反正我不会啦;
struct cs{ int x; bool operator < (const cs &rhs) const { return x > rhs.x; }}a;priority_queue<cs>Q;
这个是一个结构体的小根堆;
开心;
我们可以再结构体里面放各种东西;
感谢wl大佬;
给一个测试的代码;
#include<bits/stdc++.h>#define Ll long longusing namespace std;struct cs{ int x; bool operator < (const cs &rhs) const { return x > rhs.x; }}a;priority_queue<cs>Q;priority_queue<int,vector<int>,greater<int> >q;int x,y;int main(){ while(1){ cin>>x; if(x==1){ scanf("%d",&y); a.x=y; Q.push(a); } if(x==2){ cout<<Q.top().x<<endl; Q.pop(); } }}
关于重载运算符,好像还有一种更简单的写法
bool operator <(H x,H y){return x.v>y.v;}
那么dijkstra的最优化最短路
https://www.luogu.org/problem/show?pid=2934
#include<bits/stdc++.h>#define Ll long longusing namespace std;const int N=1e4+5;struct H{int x,y;};struct cs{int to,nxt,v;}a[500005];int d[N],head[N],ll;bool vi[N];int n,m,x,y,z,S;void init(int x,int y,int v){ a[++ll].to=y; a[ll].v=v; a[ll].nxt=head[x]; head[x]=ll;}H mH(int x,int y){H a;a.x=x;a.y=y;return a;}bool operator <(H x,H y){return x.x>y.x;}void dijkstra(){ for(int i=0;i<=n;i++)d[i]=2147483647; priority_queue<H>Q;d[S]=0;Q.push(mH(0,S)); while(!Q.empty()){ H c=Q.top();Q.pop(); if(vi[c.y])continue; int x=c.y;vi[x]=1; for(int k=head[x];k;k=a[k].nxt) if(!vi[a[k].to]&&d[a[k].to]>d[x]+a[k].v) d[a[k].to]=d[x]+a[k].v,Q.push(mH(d[a[k].to],a[k].to)); }}int main(){ scanf("%d%d%d",&n,&m,&S); for(int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),init(x,y,z); dijkstra(); for(int i=1;i<=n;i++)printf("%d ",d[i]);}
感觉数据还是比较优秀的
阅读全文
1 0
- 【C++】优先队列priority_queue
- C++priority_queue优先队列
- 优先队列 C实现
- c#---优先队列
- 优先队列C语言实现
- C++STL之优先队列
- CF322 C 优先队列+贪心
- C++STL优先队列小结
- 优先队列--C语言实现
- 优先队列(C++/Java)
- 哈夫曼树 --- 优先队列(C++STL)
- C++STL优先队列使用
- 【数据结构】【C++STL】FIFO队列&优先队列
- c++优先队列,小根堆
- 优先队列的精简实现(c++)
- CF 45C Dancing Lessons(优先队列)
- C语言队列实现广度优先遍历
- C. Sereja and Swaps/优先队列
- EasyUI 调整项目配色
- Spark流计算(一)
- 微信小程序https前端开发解决方案
- Codeforces Calculating Function
- Python基础概念_12_编程风格
- c++优先队列,小根堆
- java递归实现最大公约数和最小公倍数
- 使用jquery.qrcode生成二维码
- Android开发之EditText
- android属性动画分析
- 【Webservice】 Eclipse根据wsdl文件自动生成webservice的调用客户端
- 彻底理解webservice SOAP WSDL
- 欢迎使用CSDN-markdown编辑器
- ofbiz添加物品到购物车失败Could not find a valid price for the product with ID [XX-XXXX], not adding to cart.