洛谷P1346 电车【最短路】
题目: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 电车【最短路】的更多相关文章
- 洛谷——P1346 电车
P1346 电车 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口 ...
- 洛谷P1346 电车
P1346 电车 236通过 757提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 解不好啊,快疯了!!哪位大… 求解:为何除了-1的点之 ...
- 洛谷 - P1346 - 电车 - Dijkstra/01BFS
https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...
- 洛谷P1346 电车(需要稍加思索的最短路)
题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...
- 洛谷 P1346 电车——dijstra
上一波题目 https://www.luogu.org/problem/P1346 是道水题 路口一开始对着的那条路权值为0 其余路权值为1 然后跑一遍最短路就好了 qwq #include<c ...
- 洛谷 P1346 电车
这道题的关键在建图 把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边: 这样我们可以得到一张图: 起点,终点都知道了,跑一边最短路即可 ...
- 洛谷 P2176(最短路)
###题目链接 洛谷 P2176 ### 题目大意: 已知农夫从 1 走到 N 点,一定走的是最短路.问你将某条路的长度变为其两倍后,农夫从 1 走到 N 点的路程最大增加多少,输出最大增量. 分析: ...
- 洛谷 [P2483] [模板] k短路
人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #i ...
- 【洛谷P1144】最短路计数
题目大意:给定一个 N 个点,M 条边的无向无权图,求从 1 号点出发到其他每个点最短路的条数. 题解:在跑 dij 时顺便维护 cnt[ ] 数组,用来记录到每个点的最短路条数. 代码如下 #inc ...
随机推荐
- ding
Import "shanhai.lua"Dim currHour,currMinute,currSecondDim mmRnd = 0Dim sumFor=Int(ReadUICo ...
- [转帖]TPC-C解析系列05_TPC-C基准测试之存储优化
TPC-C解析系列05_TPC-C基准测试之存储优化 http://www.itpub.net/2019/10/08/3332/ 蚂蚁金服科技 2019-10-08 11:27:02 本文共3664个 ...
- 转:对JavaScript中闭包的理解
关于 const let var 总结: 建议使用 let ,而不使用var,如果要声明常量,则用const. ES6(ES2015)出现之前,JavaScript中声明变量只有 ...
- Redis--set类型操作命令
集合类型 set redis 的 Set 是 string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据 集合类型 set ——常用命令 sadd /smembers /sismemb ...
- 综合应用,jieba,去标点,分词保存,统计,删词,输出
import jieba fp1=r'D:/python/a.txt' outph=r'D:/python/out.txt' f=open(fp1,'r',encoding='utf-8') txt= ...
- golang之格式化fmt.Printf
当使用fmt包打印一个数值时,我们可以用%d.%o或%x参数控制输出的进制格式,就像下面的例子: o := 0666 fmt.Printf("%d %[1]o %#[1]o\n", ...
- 1010 Radix:猥琐的测试数据
谨以此题纪念边界测试数据浪费了我多少时间:https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 # ...
- RT-Flash imxrt 系列rt1052 rt1060量产神器宣传
转载: 恩智浦半导体2017年10月正式发布了业内首款跨界处理器—i.MX RT系列,超强的性能.超高的性价比使得i.MX RT系列火遍大江南北,一度成为基于MCU的产品主控首选,尤其是那些对于性能有 ...
- TZOJ1299: 畅通工程
#include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #i ...
- docker 实践七:docker-machine
本篇是关于 docker 三剑客中的 docker machine. 注:环境为 CentOS7,docker 19.03. docker-machine 是 docker 官方三剑客项目之一,它是一 ...