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
题解:可以理解为换乘问题,换一辆车就多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)相关推荐
- 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的最小换乘次数 ...
- HDU 6386 Age of Moyu
题目:Age of Moyu 思路:裸的堆优化dijkstra 代码: #include<bits/stdc++.h> using namespace std;#define maxn 2 ...
- HDU 6386 Age of Moyu(搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6386 题意:n个点,m条边,每条边有权值,双向边.你要从1走到n,若路径上的权值一样,则只用花费1即可 ...
- hdu 6386 Age of Moyu (重边判断)
本来用一个map判重边结果T了, 实际上可以直接给边上打标记即可 int n, m; struct _ {int to,w,vis;}; vector<_> g[N]; int dis[N ...
- HDU - 6386 - Age of Moyu (BFS分层+DFS 或者 最短路+set)
题意: 连续相同类型的边花费为1,走不同的边花费加一,求最少花费 BFS:维护当前最少花费,每次往外扩展一步即可 最短路:set记录到达改点的边的类型都有哪些(距离相同),如果出现更小的则清空,否则若 ...
- hdu 6386 Age of Moyu (求最短路 优先队列)
题意: 有n个点m条边 n个点编号为1~n 每条边都有一个值 从一条边到另一条边,如果两边的指不同 花费就要+1,如果相同就不需要花费. 先从1走到n问最小花费是多少.(一开始从点1出来花费 ...
- 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 ...
- 2018 Multi-University Training Contest 7----hdu 6386 Age of Moyu(Dijkstra)
点击链接 题意:给你一些路径,每次换路径的id时加收一块,求到终点所需的最少钱 思路:用Dijkstra跑一遍所有路径,从某条边到另一条边如果遇到不同的路径的时候cost+1,遇到相同的保留该cost ...
- HDU6386 Age of Moyu (2018多校第七场1001) (建虚点+堆优化dijkstra)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6386 题意: n个点m条边,每个边上有一个编号: 从一个编号走到另一个编号,需要代价1: 求1到n的最小代 ...
最新文章
- 算法--------------整数反转
- C语言求最大公约数欧几里得Euclid算法(附完整源码)
- c语言文件所在的卷,C语言复习卷带答案.docx
- 研发和人力资源发展模式对比研究
- vue项目的一些需要注意到的细节
- 原生js使用forEach()与jquery使用each遍历数组,return false 的区别
- java购物车商品排序_Java购物车
- Javascript节点的访问
- SwiftUI 教程
- 觅知网ppt模板_有哪些相见恨晚的PPT模板网站?
- 今日头条 Android ‘秒‘ 级编译速度优化
- 头腾大战,用户的头像到底属于谁的?
- Dragonfly 基于 P2P 的文件和镜像分发系统
- amcharts学习笔记
- 微信小游戏和小程序的区别
- Deepfake版阿汤哥,在海外版抖音上收获了32万粉丝
- Jetpack Compose之手写分享页面
- 【计量经济学】统计推断
- java多线程模拟购买火车票
- 从倒卖软件到批发“云”,SaaS还有多远?
热门文章
- Oracle Select语句 练习4
- “花朵分类“ 手把手搭建【卷积神经网络】
- php网站后门漏洞检测 渗透测试木马解决
- 【教程】两种免费更新iOS17测试版的方法
- python 贝叶斯分类器sklearn_使用sklearn自带的贝叶斯分类器进行文本分类和参数调优...
- sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
- 【eMMC】简介与协议浅析
- 小程序开发--content-type类型中application/json和application/x-www-form-urlencoded区别
- 做3d建模的工作工资是不是很高?从零基础学习3D建模到学成功,需要多久?
- EolinkerAPI测试