点击链接

题意:给你一些路径,每次换路径的id时加收一块,求到终点所需的最少钱

思路:用Dijkstra跑一遍所有路径,从某条边到另一条边如果遇到不同的路径的时候cost+1,遇到相同的保留该cost

如果只是普通的跑会TLE,这时候我们需要用动态数组来存遍,以便在某个点时访问所有路径时候快点,还需要一个优先队列进行bfs操作

代码:

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int vis[200005];
int cost[200005];
struct qnode
{int v;int c;int nowline;bool operator <(const qnode &r)const{return c>r.c;}
};struct Edge
{int v,id;Edge(int _v=0,int _id=0):v(_v),id(_id) {}
};
vector<Edge>E[200005];
void init(){for(int i=0;i<=200005;i++){vis[i]=0;cost[i]=INF;E[i].clear();}
}
int main(){int n,m;while(~scanf("%d %d",&n,&m)){init();int d=0;for(int i=1;i<=m;i++){int a,b,id;scanf("%d %d %d",&a,&b,&id);E[a].push_back(Edge(b,id));E[b].push_back(Edge(a,id));}priority_queue<qnode>que;while(!que.empty())que.pop();cost[1]=0;que.push((qnode){1,0,-1});qnode tmp;while(!que.empty()){tmp=que.top();que.pop();int x=tmp.v;if(vis[x]){continue;}vis[x]=1;for(int i=0;i<E[x].size();i++){int v=E[tmp.v][i].v;int mark=0;if(E[x][i].id!=tmp.nowline){mark=1;}else{mark=0;}if(!vis[v] && cost[v]>cost[x]+mark){cost[v]=cost[x]+mark;que.push((qnode){v,cost[v],E[x][i].id});}}}if(cost[n]>=INF){printf("-1\n");}else{printf("%d\n",cost[n]);}}}

2018 Multi-University Training Contest 7----hdu 6386 Age of Moyu(Dijkstra)相关推荐

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

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

  2. 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的最小换乘次数 ...

  3. 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  4. HDU 6386 Age of Moyu 2018 Multi-University Training Contest 7(最短路径dijkstra)

    Age of Moyu 题意:第一行给出n,m,接下来有m条路,每一行给出 a b c ,从a到b 是c掌控. 若下一条路与上一条路不属于一个c,需要缴费1. 输出从1到N的最小花费,不通则输出-1 ...

  5. HDU 6386 Age of Moyu(搜索)

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

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

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

  7. 2020 Multi-University Training Contest 6---- HDU--6828、Little Rabbit‘s Equation(模拟)

    题目链接 题面: 题意: 判定给定等式在 2−162-162−16 进制,最低几进制下成立. 题解: 模拟即可,注意进制最低为2. 代码: #include<iostream> #incl ...

  8. HDU 6386 Age of Moyu

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

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

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

最新文章

  1. vue入门实践,style和数据绑定
  2. 非技术成本继续困扰光伏产业
  3. python爬虫技术可以干什么-Python除了爬虫,还能干啥?
  4. php detect unicode,php-functions/unicode.php at master · xiilei/php-functions · GitHub
  5. postgre 生成数据库html文档_还在手动整理数据库文档?试试这个(螺丝钉)数据库文档生成工具...
  6. 转移到ios下载安卓_安卓和IOS角色互转 和平精英跨系统角色转移服务将上线
  7. 【TWVRP】基于matlab遗传算法和模拟退火求解带时间窗自行车调度问题【含Matlab源码 370期】
  8. (转)EBWin辞典下载资源
  9. SQL数据库置疑修复
  10. C# 使用OpenXML创建PPT表格
  11. win10终端中如何切换磁盘
  12. 什么是强制性3C认证?
  13. 扫地机器人的“新故事”,从“第三次革命”开始
  14. android 短信超链接,Android处理网页的短信链接
  15. 在线TSV转SQL工具
  16. linux脚本除号,Shell脚本编程(上)
  17. 想自学编程,不知道先学哪个?
  18. 计算机二级Python大题
  19. 四元数绕某个轴旋转某度之后的得到的四元数+pcl使用总结
  20. USGS官方的各种卫星数据产品的详细说明(很多英文缩写都可在这里找到详细信息,如ETM+和TM的意思,也可以下载)

热门文章

  1. $test 和 “$test“ 的区别
  2. js - 宝石与石头
  3. 脉冲神经网络Precise-Spike-Driven (PSD) Synaptic Plasticity学习笔记
  4. (附源码)springboot+mysql+基于javaweb的课堂考勤系统设计与实现 毕业设计142335
  5. 快餐店装修材料之石膏板吊顶的施工
  6. Spark读取日志文件集中文乱码解决方法
  7. 奶粉企业的良知和社会责任
  8. 读书笔记9 《发现的乐趣》 理查德-费曼
  9. 支付宝小程序演示示例
  10. 为何曾经的程序员不当程序员了?如果有一天你当了程序员了,能去干嘛?