迪杰斯特拉堆优化
来源:互联网 发布:ubuntu登陆界面鼠标 编辑:程序博客网 时间:2024/05/16 08:06
https://www.luogu.org/problem/show?pid=3371
看着和spfa可像了
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <bits/stdc++.h>#include <queue>using namespace std;const int INF=2147483647;int n,m,ss;vector< pair<int ,int > > d[100005];struct node{ friend bool operator<(node a,node b) { return a.y>b.y; } int x,y;} s[100005];int disk(int x){ priority_queue<node> dp; for(int i=0;i<=n;i++) { s[i].y=INF; s[i].x=i; } s[x].y=0; dp.push(s[x]); while(dp.size()) { x=dp.top().x; dp.pop(); int l=s[x].y; int xe,ye; //cout<<d[x].size()<<' '<<x<<endl; for(int i=0;i<d[x].size();i++) { xe=d[x][i].first; ye=d[x][i].second; if(s[xe].y>l+ye) { s[xe].y=l+ye; // cout<<s[xe].y<<' '<<xe<<' '<<ye<<endl; dp.push(s[xe]); } } } for(int i=1;i<=n;i++) { if(i-1) cout<<" "; cout<<s[i].y; } cout<<endl;}int main(){ scanf("%d%d%d",&n,&m,&ss); int x,y,z; for(int i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&z); d[x].push_back(make_pair(y,z)); } disk(ss);}
阅读全文
0 0
- 迪杰斯特拉堆优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 希尔排序法
- Qt槽连接
- spring mvc
- Hadoop benchmark测试及调参
- mysql 之: inner join , left join 和 right join 的区别
- 迪杰斯特拉堆优化
- 如何提高深度学习(和机器学习)的性能
- 二叉苹果树
- (一)IOC容器系列的设计与实现:BeanFactory和ApplicationContext
- 进程间通信IPC 主题一 之 消息队列
- 如何用C/C++程序获取博客的访问量和积分信息
- 欢迎使用CSDN-markdown编辑器
- Matplotlib 教程
- 队列