解题思路

heap+Dijkstra就能过。注意边是双向边,要用long long。

附上代码

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef pair<long long, int> P;
priority_queue<P, vector<P>, greater<P> > Q;
typedef long long LL;
const int maxnode = 1e5+, maxedge = 2e5+;
int n, m, u[maxedge], v[maxedge], fir[maxnode], nx[maxedge], pre[maxnode], Ans[maxnode];
LL w[maxedge], dis[maxedge], cnt, tot;
inline void addedge(int x, int y, LL z) {
nx[++cnt] = fir[x];
fir[x] = cnt;
u[cnt] = x, v[cnt] = y, w[cnt] = z;
}
inline void Dijkstra() {
fill(dis+, dis++n, );
Q.push(P(, ));
dis[] = ;
int k;
while (!Q.empty()) {
P x = Q.top();
Q.pop();
if(x.first > dis[x.second]) continue;
k = fir[x.second];
while (k != -) {
if(dis[u[k]] + w[k] < dis[v[k]]) {
dis[v[k]] = dis[u[k]] + w[k];
pre[v[k]] = u[k];
Q.push(P(dis[v[k]], v[k]));
}
k = nx[k];
}
}
} int main() {
scanf("%d%d", &n, &m);
memset(fir, -, sizeof(fir));
int x, y; LL z;
for(int i=; i<=m; i++) {
scanf("%d%d%lld", &x, &y, &z);
addedge(x, y, z);
addedge(y, x, z);
}
Dijkstra();
if(dis[n] == ) {
printf("-1\n");
return ;
}
for(int i=n; i>=; i=pre[i]) {
Ans[++tot] = i;
}
for(int i=tot; i>=; i--) printf("%d ", Ans[i]);
}

CodeForces 【20C】Dijkstra?的更多相关文章

  1. 【Codeforces 20C】 Dijkstra?

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

  2. 【Luogu4931】情侣?给我烧了! 加强版(组合计数)

    [Luogu4931]情侣?给我烧了! 加强版(组合计数) 题面 洛谷 题解 戳这里 忽然发现我自己推的方法是做这题的,也许后面写的那个才是做原题的QwQ. #include<iostream& ...

  3. 【Luogu4921】情侣?给我烧了!(组合计数)

    [Luogu4921]情侣?给我烧了!(组合计数) 题面 洛谷 题解 很有意思的一道题目. 直接容斥?怎么样都要一个平方复杂度了. 既然是恰好\(k\)对,那么我们直接来做: 首先枚举\(k\)对人出 ...

  4. 【5min+】 什么?原来C#还有这两个关键字

    系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...

  5. 【转】dijkstra算法

    来自:https://blog.csdn.net/tw_345/article/details/50109375#comments 2015年11月30日 10:55:08 阅读数:1241 说到di ...

  6. 【转载】Dijkstra算法和Floyd算法的正确性证明

      说明: 本文仅提供关于两个算法的正确性的证明,不涉及对算法的过程描述和实现细节 本人算法菜鸟一枚,提供的证明仅是自己的思路,不保证正确,仅供参考,若有错误,欢迎拍砖指正   ----------- ...

  7. 【模板】dijkstra与floyd

    (我永远喜欢floyd) 温馨提示:与SPFA一起食用效果更佳 传送门:https://www.cnblogs.com/Daz-Os0619/p/11388157.html Floyd 大概思路: 对 ...

  8. 【转】Dijkstra算法(单源最短路径)

    原文:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...

  9. 【模板】Dijkstra的heap优化

    为了将最小费用最大流的spfa优化,决定将spfa换成heap优化的Dijkstra.(dijkstra不能处理负边权) 所以还得现学... 白点表示已经确定最短路径的点. 蓝点表示还未确定最短路径的 ...

随机推荐

  1. 获取发布的头条的url,避免点击打开新的页面

    https://www.toutiao.com/ document.getElementsByClassName("ugc-mode-content")[0].getElement ...

  2. clojure一些笔记

    https://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutorial/#intr ...

  3. C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络(二)

    窗体界面: 下面是项目二的代码 本代码我是留着备份学习的 以供参考: 存储过程: 存储过程: 插入数据:CREATE OR REPLACE Procedure p_insert_t_cls --存储过 ...

  4. dubbo和SpringCould

    作为常用的微服务框架,这两者经常会被对比,但实际上两者有不少差异. dubbo好比组装电脑,很多东西可以自己选配,自由度高但对于小白难入门,很可能因为某个组件没选好,导致完全用不起来. SpringC ...

  5. gitlab邮箱验证 邮箱提醒设置

    Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另一种是GMAIL的stmp来发送邮件   第一种 用系统的sendmail发送邮件   cd /ho ...

  6. 第2章 微信小程序的基础组件学习

    小程序也可以用div+css进行排版. flex-direction排列方向,可以控制内部的成员的顺序,比如从左到右.从右到左.上下,纵向和横向. flex-wrap可以控制换行是如何去换行的,控制它 ...

  7. 栗染-git命令搭建简单的个人的网页

    本来一个很简单的东西被自己搞了很久 可能是对于一个小白来说第一次认识到github的魅力吧,以前只是听别人说过用github搭建网站,听起来很厉害的样子,一直也没有尝试过,突然兴起今天去网上找一些教程 ...

  8. 规范化创建一个vs2017 Mvc框架项目

    vs2107 + dapper + MiniUi 标准化分层封装使 3.1 规范化创建一个vs2017 Mvc框架项目 此时创建的项目勾选 添加单元测试. 添加一个类库,主要用于实体类操作,类库名称 ...

  9. Spring加载applicationContext.xml实现spring容器管理的几种方式

    package com.etc.test; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; i ...

  10. CF868B Race Against Time

    思路: 模拟.少写了一个等号FST了,好气啊. 实现: #include <bits/stdc++.h> using namespace std; int main() { int h, ...