题目大意:

给定无向图的n m为点数和边数

接下来m行给定u v id表示点u到点v间有一条编号为id的边

当由一条边走到另一条边 而两条边的编号不同时 费用+1

优先队列跑dijkstra最短路 按费用排序

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
#define P pair<int,int>
#define mp make_pair
#define fir first
#define sec second
#define pb push_back
const int N=1e5+; int n,m;
vector<P>G[N];
struct NODE {
int u,d,id,fa;
bool operator <(const NODE& p)const {
return d>p.d;
}
};
int dis[N]; void dijkstra() {
priority_queue<NODE>q;
while(!q.empty()) q.pop();
q.push({,,,-}); dis[]=;
while(!q.empty()) {
NODE e=q.top(); q.pop();
int u=e.u;
if(u==n) break;
for(int i=;i<G[u].size();i++) {
P t=G[u][i];
int v=t.fir;
if(u==v) continue;
if(dis[v]>dis[u]+(t.sec!=e.id)) {
dis[v]=dis[u]+(t.sec!=e.id);
q.push({v,dis[v],t.sec,u});
}
}
}
} void init() {
mem(dis,INF);
for(int i=;i<=n;i++) G[i].clear();
} int main()
{
while(~scanf("%d%d",&n,&m)) {
init();
while(m--) {
int u,v,id;
scanf("%d%d%d",&u,&v,&id);
G[u].pb(mp(v,id));
G[v].pb(mp(u,id));
}
dijkstra();
if(dis[n]==INF) printf("-1\n");
else printf("%d\n",dis[n]);
} return ;
}

hdu6395 /// 优先队列dijkstra的更多相关文章

  1. hdoj1874 (优先队列+Dijkstra)

    hdoj1874 分析: 一看题目, 就是求最短路, 这道题用的是Dijkstra+优先队列.先说一下Dijkstra算法:每次扩展一个距离最短的节点, 更新与其相邻点的距离. 当所有边权都为正时, ...

  2. 最长k可重线段集问题【费用流】【优先队列Dijkstra费用流】

    题目链接 与最长K可重区间问题一样的解法,但是这道题却有很多需要注意的地方,譬如就是精度问题,一开始没考虑到sprt()里面的乘会爆了精度,然后交上去竟然是TLE,然后找的原因方向也没对,最后TLE了 ...

  3. POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...

  4. dijkstra算法与优先队列

    这是鄙人的第一篇技术博客,作为算法小菜鸟外加轻度写作障碍者,写技术博客也算是对自己的一种挑战和鞭策吧~ 言归正传,什么是dijkstra算法呢? -dijkstra算法是一种解决最短路径问题的简单有效 ...

  5. 【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)

    Dijkstra+ 链式前向星+ 优先队列   Dijkstra算法 Dijkstra最短路算法,个人理解其本质就是一种广度优先搜索.先将所有点的最短距离Dis[ ]都刷新成∞(涂成黑色),然后从起点 ...

  6. Codeforces 677D - Vanya and Treasure - [DP+优先队列BFS]

    题目链接:http://codeforces.com/problemset/problem/677/D 题意: 有 $n \times m$ 的网格,每个网格上有一个棋子,棋子种类为 $t[i][j] ...

  7. HDU-2680 Choose the best route 单向边+反向dijkstra

    https://vjudge.net/problem/HDU-2680 题意:以起始点 终点 长度 给出一个图,已知可以从w个起点出发,求从任一起点到同一个终点s的最短路径.注意是单向边.m<1 ...

  8. 图论-最短路径<Dijkstra,Floyd>

    昨天: 图论-概念与记录图的方法 以上是昨天的Blog,有需要者请先阅读完以上再阅读今天的Blog. 可能今天的有点乱,好好理理,认真看完相信你会懂得 分割线 第二天 引子:昨天我们简单讲了讲图的概念 ...

  9. POJ 3159 Candies(差分约束,最短路)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 20067   Accepted: 5293 Descrip ...

随机推荐

  1. 开启MySQL远程访问权限 允许远程连接(阿里云服务器)、linux关闭防火墙

    1.登陆mysql:mysql -u root -p mysql> show databases; +--------------------+ | Database | +---------- ...

  2. (1.1)学习笔记之mysql体系结构(内存、进程、线程)

    关键词:mysql体系结构 参考:https://www.cnblogs.com/zhoubaojian/articles/7866292.html 一.mysql体系架构概述 1.mysql体系结构 ...

  3. 清除浮动最有效的css写法

    说起来呢,基本上只要你给容器div加了float的属性,就需要清除浮动来使页面显示正常,那么,到底有什么方法可以让浮动轻松清除呢? 可以用display:flex;替代,但是它对IE8,9支持不是很好 ...

  4. Process Array

    http://xiaorui.cc/2016/05/10/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90multiprocessing%E7%9A%84value-array ...

  5. ionic ios上状态栏和app重叠解决方案

    干货文章 ·2018-03-22 01:33:01 官方issues: https://github.com/ionic-team/ionic/issues/13294 解决办法: 1.在 confi ...

  6. BiLSTM介绍

    https://www.jiqizhixin.com/articles/2018-10-24-13 (机器之心)

  7. KiCAD原理图更换库

    KiCAD原理图库更换 将AD的工程文件转换位KiCAD后,打开原理图,系统会自动压缩生成当前工程库,但是这样将原理图复制粘贴到其他地方时,就找不到库了,原理图就会无法显示器件符号,如何将库替换为我们 ...

  8. KiCAD泪滴

    KiCAD泪滴 KiCAD没有自带的补泪滴功能,必须先下载一个插件,然后才能进行泪滴操作 链接 提取码:ey8o 1.下载泪滴插件,解压后将整个文件夹复制到目录  C:\Program Files\K ...

  9. Qt【Could not parse stylesheet of object 0x7f7990 】

    查找自己所写的 setstylesheet(); 然后看里面的括号标点什么的有没有多余的,删除即可解决.

  10. DELPHI 多线程(TThread类的实现)

    之前学习了用API实现,让我们再学习下用DELPHI的TThread类. 先新建一个普通的工程,再新建一个线程类File>>New>>Othre>>Delphi F ...