cf 20C Dijkstra?
2024-08-22 19:22:29
带队列 dijkstra
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include<memory.h>
#include<algorithm>//reverse
using namespace std;
#define maxn 100002
#define INF 65
struct node
{
int u;
int w;
node(long long x,long long y)
{
u = x;
w = y;
}
bool operator < ( const node& p ) const
{ return w > p.w; }
};
vector<long long>g[maxn];
vector<long long>cost[maxn];
long long d[maxn];
long long par[maxn];
int dijk(int n)
{
memset(d, INF, sizeof(d));
memset(par, -, sizeof(par));
priority_queue<node>q;
q.push(node(,));
d[]=;
while(!q.empty())
{
node top = q.top();
q.pop();
int uu = top.u;
if(uu == n) return d[n];
for(int i = ;i < g[uu].size(); i++)
{
int v = g[uu][i];
if(d[uu] + cost[uu][i] < d[v])
{
d[v] = d[uu] + cost[uu][i];
par[v] = uu;
q.push(node(v,d[v]));
}
}
}
return -;
}
int main()
{
//freopen("input.txt","r",stdin);
int n,e,u,v;
long long w;
cin>>n>>e;
for(int i = ; i < e; i++)
{
cin>>u>>v>>w;
g[u].push_back(v);cost[u].push_back(w);
g[v].push_back(u);cost[v].push_back(w); }
w = dijk(n);
if(w == -) cout<<"-1"<<endl;
else
{
int t = n;
int s[maxn];
int k = ;
while(t != -)
{
s[k++] = t;
t = par[t];
}
for(int j = k - ; j >= ; j--)
cout<<s[j]<<" ";
cout<<endl;
}
}
最新文章
- Git 常用命令详解
- zk系列-zookeeper的使用
- OmniPlan文档链接
- 关于hive的存储格式
- CSS之上边栏
- 推荐2个小工具 .NET reflector resharper
- Selenium WebDriver java 简单实例
- Cstyle的UEFI导读:第20.0篇 IGD OpRegion interface &;amp;&;amp; IGD OpRegion PROTOCOL
- org.w3c.dom.Element 缺少 setTextContent 步骤
- python进阶------进程线程(三)
- Kali Linux安装VMWare Tools
- Git来操作GitHub~
- Web Api使用Swagger提供在线文档
- 活代码LINQ——01
- 常用css字体英文写法
- Spark记录-SparkSQL一些操作
- python3.4读取excel数据绘图
- Navicat 同步数据库中数据
- c++中用vector创建多维数组的初始化方法
- MySQL 找回密码
热门文章
- python下彻底解决浏览器多标签打开与切换问题
- leetcode240
- ElasicSearch(4) 与jest结合
- Java中的包装数据类型
- window.location.href 页面不跳转解决
- Android 查阅博客1_app优化_1大小
- linux 大容量磁盘分区工具parted
- C程序的编译与链接
- TypeError: while_loop() got an unexpected keyword argument &#39;maximum_iterations&#39;
- HDU 5828 Rikka with Sequence(线段树区间加开根求和)