题目https://www.luogu.org/problemnew/show/P1346

题意:n个路口,每个路口有好几条轨道,默认指向给出的第一个路口。

如果要换到另外的轨道去需要按一次开关。问从a到b最少需要几次开关。

思路:可以把默认的路口的轨道权值设为0,其他的权值都是1,不通的权值都是inf。

然后跑一遍最短路。注意-1.

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n, a, b;
const int maxn = ;
int g[maxn][maxn];
bool vis[maxn];
int d[maxn];
void dijkstra(int st)
{
memset(d, 0x3f, sizeof(d));
d[st] = ;
vis[st] = true;
for(int i = ; i <= n; i++){
if(i != st)d[i] = g[st][i];
}
for(int t = ; t < n; t++){
int min = inf, minid;
for(int i = ; i <= n; i++){
if(!vis[i] && d[i] < min){
min = d[i];
minid = i;
}
} vis[minid] = true;
for(int i = ; i <= n; i++){
if(d[i] > min + g[minid][i]){
d[i] = min + g[minid][i];
}
}
} return;
} int main()
{
scanf("%d%d%d", &n, &a, &b);
memset(g, 0x3f, sizeof(g));
for(int i = ; i <= n; i++){
int k, to;
scanf("%d", &k);
if(k){
scanf("%d", &to);
g[i][to] = ;
}
for(int j = ; j < k; j++){
scanf("%d", &to);
g[i][to] = ;
}
} dijkstra(a);
if(d[b] > 1e9)printf("-1\n");
else printf("%d\n", d[b]);
return ;
}

最新文章

  1. [Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频
  2. Mac 将mysql路径加入环境变量
  3. 人脸对齐ASM-AAM-CLM的一些总结
  4. C++ 头文件系列(iterator)
  5. [技术] OIer的C++标准库 : 字符串库&lt;string&gt;
  6. 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
  7. k短路(A*)
  8. 实现多线程爬取数据并保存到mongodb
  9. PXC添加新节点
  10. SpringIOC和AOP原理 设计模式
  11. box-sizing 和 dom width
  12. Spring Boot 1.5.10 发布:修复重要安全漏洞!!!
  13. zabbix2.2 - FromDual.MySQL.check&quot; became not supported
  14. 3 Python 函数介绍
  15. Percona XtraDB Cluster 5.7
  16. MVC 源码调试
  17. 使用SoapUI生成WS请求报文
  18. js数组基本知识
  19. 前端读者 | Web App开发入门
  20. C# 获取电脑硬盘剩余空间

热门文章

  1. Thinking In Java 4th Chap8 多态(未完)
  2. Python进阶:metaclass谈
  3. linux 下搭建go开发环境
  4. 使用Jenkins的Git Parameter插件来从远程仓库拉取指定目录的内容
  5. C# ObservableCollection两个字段排序的情况
  6. SVN_02安裝
  7. Vue+VSCode开发环境搭建
  8. jquery.fileupload源码解读笔记
  9. JAVA操作ORACLE大对象
  10. Oracle数据库账户口令复杂度-等保测评之身份鉴别