Age of Moyu

题意:第一行给出n,m,接下来有m条路,每一行给出 a b c ,从a到b 是c掌控。

若下一条路与上一条路不属于一个c,需要缴费1. 输出从1到N的最小花费,不通则输出-1

题解:可以理解为换乘问题,换一辆车就多1花费,初始花费为1.

用最短路的思想,求出每个点的最小花费,用优先队列即可

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <set>
#include <map>
using namespace std;const int MAXN = 200005;
const int INF = 0x3f3f3f3f;int N,M;
struct edge{int to,next,kind;
}E[MAXN*2];//双向边,双倍空间 int head[100005],tot;
int dis[100005];
inline void Add(int from, int to ,int c)
{E[tot].to=to;E[tot].next=head[from];E[tot].kind=c;head[from]=tot++;E[tot].to=from;E[tot].next=head[to];E[tot].kind=c;head[to]=tot++;
}
inline void init()
{tot=0;memset(head,-1,sizeof(head));
}
struct D{int num,w,kind;D(){}D(int _num,int _w,int _kind){num=_num,w=_w,kind=_kind;}
};
struct cmp
{bool operator ()(D a,D b){return a.w>b.w;}
};
int BFS(int x)
{priority_queue<D,vector<D>,cmp> q;fill(dis,dis+N+1,INF);dis[x]=0;q.push(D(x,0,-1));D t;while(!q.empty()){t=q.top(); q.pop();if(t.w>dis[t.num])continue;//若要这个点比到达这个点的最短花费多,跳过if(t.num==N)return t.w;for(int i=head[t.num];~i;i=E[i].next)//i=-1停止{int l;if(E[i].kind==t.kind)l=dis[t.num];else l=dis[t.num]+1;if(l<dis[E[i].to]){dis[E[i].to]=l;q.push(D(E[i].to,l,E[i].kind));//这个最短路需要更新,入队} }}return -1;
}
int main(){while(scanf("%d %d",&N,&M) == 2){init();if(M == 0){printf("-1\n");continue;}int a,b,c;for(int i=1 ; i<=M ; ++i){scanf("%d %d %d",&a,&b,&c);Add(a,b,c);}printf("%d\n",BFS(1));}return 0;
}

HDU 6386 Age of Moyu 2018 Multi-University Training Contest 7(最短路径dijkstra)相关推荐

  1. HDU 6386 Age of Moyu DFS+BFS

    /** HDU 6386 Age of Moyu DFS+BFS 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6386题意:1-->n的最小换乘次数 ...

  2. HDU 6386 Age of Moyu

    题目:Age of Moyu 思路:裸的堆优化dijkstra 代码: #include<bits/stdc++.h> using namespace std;#define maxn 2 ...

  3. HDU 6386 Age of Moyu(搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6386 题意:n个点,m条边,每条边有权值,双向边.你要从1走到n,若路径上的权值一样,则只用花费1即可 ...

  4. hdu 6386 Age of Moyu (重边判断)

    本来用一个map判重边结果T了, 实际上可以直接给边上打标记即可 int n, m; struct _ {int to,w,vis;}; vector<_> g[N]; int dis[N ...

  5. HDU - 6386 - Age of Moyu (BFS分层+DFS 或者 最短路+set)

    题意: 连续相同类型的边花费为1,走不同的边花费加一,求最少花费 BFS:维护当前最少花费,每次往外扩展一步即可 最短路:set记录到达改点的边的类型都有哪些(距离相同),如果出现更小的则清空,否则若 ...

  6. hdu 6386 Age of Moyu (求最短路 优先队列)

    题意: 有n个点m条边   n个点编号为1~n   每条边都有一个值  从一条边到另一条边,如果两边的指不同 花费就要+1,如果相同就不需要花费. 先从1走到n问最小花费是多少.(一开始从点1出来花费 ...

  7. HDU - 6386 Age of Moyu

    Mr.Quin love fishes so much and Mr.Quin's city has a nautical system,consisiting ofNN ports and MM s ...

  8. 2018 Multi-University Training Contest 7----hdu 6386 Age of Moyu(Dijkstra)

    点击链接 题意:给你一些路径,每次换路径的id时加收一块,求到终点所需的最少钱 思路:用Dijkstra跑一遍所有路径,从某条边到另一条边如果遇到不同的路径的时候cost+1,遇到相同的保留该cost ...

  9. HDU6386 Age of Moyu (2018多校第七场1001) (建虚点+堆优化dijkstra)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6386 题意: n个点m条边,每个边上有一个编号: 从一个编号走到另一个编号,需要代价1: 求1到n的最小代 ...

最新文章

  1. 算法--------------整数反转
  2. C语言求最大公约数欧几里得Euclid算法(附完整源码)
  3. c语言文件所在的卷,C语言复习卷带答案.docx
  4. 研发和人力资源发展模式对比研究
  5. vue项目的一些需要注意到的细节
  6. 原生js使用forEach()与jquery使用each遍历数组,return false 的区别
  7. java购物车商品排序_Java购物车
  8. Javascript节点的访问
  9. SwiftUI 教程
  10. 觅知网ppt模板_有哪些相见恨晚的PPT模板网站?
  11. 今日头条 Android ‘秒‘ 级编译速度优化
  12. 头腾大战,用户的头像到底属于谁的?
  13. Dragonfly 基于 P2P 的文件和镜像分发系统
  14. amcharts学习笔记
  15. 微信小游戏和小程序的区别
  16. Deepfake版阿汤哥,在海外版抖音上收获了32万粉丝
  17. Jetpack Compose之手写分享页面
  18. 【计量经济学】统计推断
  19. java多线程模拟购买火车票
  20. 从倒卖软件到批发“云”,SaaS还有多远?

热门文章

  1. Oracle Select语句 练习4
  2. “花朵分类“ 手把手搭建【卷积神经网络】
  3. php网站后门漏洞检测 渗透测试木马解决
  4. 【教程】两种免费更新iOS17测试版的方法
  5. python 贝叶斯分类器sklearn_使用sklearn自带的贝叶斯分类器进行文本分类和参数调优...
  6. sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
  7. 【eMMC】简介与协议浅析
  8. 小程序开发--content-type类型中application/json和application/x-www-form-urlencoded区别
  9. 做3d建模的工作工资是不是很高?从零基础学习3D建模到学成功,需要多久?
  10. EolinkerAPI测试