带队列  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;
}
}

cf 20C Dijkstra?的更多相关文章

  1. Codeforces 图论题板刷(2000~2400)

    前言 首先先刷完这些在说 题单 25C Roads in Berland 25D Roads not only in Berland 9E Interestring graph and Apples ...

  2. 【Codeforces 20C】 Dijkstra?

    [题目链接] 点击打开链接 [算法] dijkstra [代码] #include<bits/stdc++.h> using namespace std; typedef long lon ...

  3. CodeForces 【20C】Dijkstra?

    解题思路 heap+Dijkstra就能过.注意边是双向边,要用long long. 附上代码 #include <iostream> #include <queue> #in ...

  4. 蒟蒻修养之cf橙名计划

    因为太弱,蒟蒻我从来没有上过div1(这就是今年的最后愿望啊啊啊啊啊)已达成................打cf几乎每次都是fst...........所以我的cf成绩图出现了惊人了正弦函数图像.. ...

  5. [CF787D]遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)

    Problem 遗产 题目大意 给出一个带权有向图,有三种操作: 1.u->v添加一条权值为w的边 2.区间[l,r]->v添加权值为w的边 3.v->区间[l,r]添加权值为w的边 ...

  6. cf自训4.10

    cf933A dp题 一开始看错是连续子序列了,然后样例刚好能过.. 然后正解没想出来,网上看了题解:感觉正解是枚举2开始的位置,然后再枚举翻转的区间,pos左右两侧分别求出贡献最大的那个区间,左右两 ...

  7. hdu 2066 一个人的旅行(dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

随机推荐

  1. 对象转Json时,Date类型格式化问题

    object是一个对象,该对象中有一个字段为Date类型 使用JSONObject obj = JSONObject.fromObject(object);将Object转成json时 Date类型字 ...

  2. leetcode1028

    class Solution(object): def __init__(self): self.List = list() def rdfs(self,S): if S != '': length ...

  3. mysql 乐观锁实现

    一.为什么需要锁(并发控制)?      在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题.      典型的冲突有:        1.丢失更新:一个事 ...

  4. java学习--构造方法

    构造方法的作用:创建对象并初始化对象 定义规则:构造方法名与类名相同且没有返回值.(构造方法不需要设置返回值类型,包括void) 在没有定义构造方法是,编译器会自动为类添加形如  类名 () {}  ...

  5. mysql_day03

    MySQL-Day02回顾1.表记录的管理 1.删除表记录 1.delete from 表名 where 条件; ## 不加where条件全部删除 2.更新表记录 1.update 表名 set 字段 ...

  6. PC滚动条样式

    #jmwin2为外部容器             #jmwin2{   width: 90%;   height: 65%;   background: white;   position: abso ...

  7. lenet-5

    https://blog.csdn.net/happyorg/article/details/78274066 深度学习 CNN卷积神经网络 LeNet-5详解 2017年10月18日 16:04:3 ...

  8. pythonj基础(六)函数初识

    一.什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以 ...

  9. linux主机名设置

    有时会报错: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostExcept ...

  10. IP、TCP、DNS协议

    ·······················································IP协议························· 位于网络层,作用是把数据包传送 ...