题目: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 ;
}

洛谷P1346 电车【最短路】的更多相关文章

  1. 洛谷——P1346 电车

    P1346 电车 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口 ...

  2. 洛谷P1346 电车

    P1346 电车 236通过 757提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 解不好啊,快疯了!!哪位大… 求解:为何除了-1的点之 ...

  3. 洛谷 - P1346 - 电车 - Dijkstra/01BFS

    https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...

  4. 洛谷P1346 电车(需要稍加思索的最短路)

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

  5. 洛谷 P1346 电车——dijstra

    上一波题目 https://www.luogu.org/problem/P1346 是道水题 路口一开始对着的那条路权值为0 其余路权值为1 然后跑一遍最短路就好了 qwq #include<c ...

  6. 洛谷 P1346 电车

    这道题的关键在建图 把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边: 这样我们可以得到一张图: 起点,终点都知道了,跑一边最短路即可 ...

  7. 洛谷 P2176(最短路)

    ###题目链接 洛谷 P2176 ### 题目大意: 已知农夫从 1 走到 N 点,一定走的是最短路.问你将某条路的长度变为其两倍后,农夫从 1 走到 N 点的路程最大增加多少,输出最大增量. 分析: ...

  8. 洛谷 [P2483] [模板] k短路

    人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #i ...

  9. 【洛谷P1144】最短路计数

    题目大意:给定一个 N 个点,M 条边的无向无权图,求从 1 号点出发到其他每个点最短路的条数. 题解:在跑 dij 时顺便维护 cnt[ ] 数组,用来记录到每个点的最短路条数. 代码如下 #inc ...

随机推荐

  1. 更改 MATLAB 默认工作路径

    步骤: 1. 以管理员身份打开记事本,然后打开 MATLAB安装路径\MATLAB\R2010b\toolbox\local\matlabrc.m 文件,即打开安装路径下的 matlabrc.m 文件 ...

  2. Python开发【第二章】:数据类型

    基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...

  3. Oracle随笔之用拆分后的列数据关联表查询

    -----------------------建表------------------------- create table test(id int, plist varchar2(30)) ; c ...

  4. redis列表数据类型---list

    一.概述 redis列表是简单的字符串列表,按照插入顺序排序 可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含2^32-1个元素(每个列表超过40亿个元素). 二.redis ...

  5. List、dictionary、hashtable、ArrayList集合

    集合的引用命名空间在 system.Collections下 1.为什么引入集合 因为数组长度是固定的,为了建立一个动态的"数组",所以引入了集合. 2.为什么引入ArrayLis ...

  6. 编写Postgres扩展之五:代码组织和版本控制

    原文:http://big-elephants.com/2015-11/writing-postgres-extensions-part-v/ 编译:Tacey Wong 在关于编写Postgres扩 ...

  7. 我自己用C++写了个GMM(Gaussian mixture model)模型

    我自己用C++写了个GMM(Gaussian mixture model)模型 Written for an assignment 之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignmen ...

  8. robot framework 怎么验证搜索无记录,页面元素不存在

    假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好  class=vtext 你好1  class=vtext 你好2  class ...

  9. js中0.1+0.2 与0.3的对比

    Math.abs(0.1+0.2-0.3)<=Number.EPSILON

  10. Cron 定时任务表达式

    Cron Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth M ...