洛谷P1346 电车(需要稍加思索的最短路)
题目描述
在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能)。在每个路口,都有一个开关决定着出去的轨道,每个开关都有一个默认的状态,每辆电车行驶到路口之后,只能从开关所指向的轨道出去,如果电车司机想走另一个轨道,他就必须下车切换开关的状态。
为了行驶向目标地点,电车司机不得不经常下车来切换开关,于是,他们想请你写一个程序,计算一辆从路口 AAA 到路口 BBB 最少需要下车切换几次开关。
输入格式
第一行有 333 个整数 N,A,BN,A,BN,A,B(2≤N≤100,1≤A,B≤N2 \leq N \leq 100, 1 \leq A,B \leq N2≤N≤100,1≤A,B≤N),分别表示路口的数量,和电车的起点,终点。
接下来有 NNN 行,每行的开头有一个数字 KiK_iKi(0≤Ki≤N−10 \leq K_i \leq N-10≤Ki≤N−1),表示这个路口与 KiK_iKi 条轨道相连,接下来有 KiK_iKi 个数字表示每条轨道所通向的路口,开关默认指向第一个数字表示的轨道。
输出格式
输出文件只有一个数字,表示从 AAA 到 BBB 所需的最少的切换开关次数,若无法从 AAA 前往 BBB,输出 −1-1−1。
输入输出样例
3 2 1
2 2 3
2 3 1
2 1 2
0 这个题一开始一直在纠结走了一条非指定方向的路后这个路口的指定方向是否还要更改。后来看别人的博客想到了其实这根本没有什么影响。假设再次经过这个路口相当于绕了一个环,这时候指定方向已经更改,如果不按按钮继续走的话还是会绕圈,如果按了按纽换到别的方向肯定不会是最优解了;如果再也不经过这个路口,那么改不改指定方向其实没有区别,这样的话,可以这么建图,把一开始路口连着的指定方向的边的权值设置为0,其它边设置为1,然后跑一遍最短路即可。
注意:1.一个路口连接的道路数可能为0
2.如果到不了的话输出-1
#include <bits/stdc++.h>
#define INF 0x3f
using namespace std;
int n,a,b,tot;
const int N=,M=;
int head[N],ver[*M],Next[*M],edge[*M];
bool v[N];
int d[N];
priority_queue<pair<int,int> >q;
void add(int x,int y,int z)
{
ver[++tot]=y;
edge[tot]=z;
Next[tot]=head[x];
head[x]=tot;
}
void Dijkstra()
{
int i;
memset(d,0x3f3f3f3f,sizeof(d));
memset(v,,sizeof(v));
d[a]=;
q.push(make_pair(,a));
while(q.size())
{
int x=q.top().second;q.pop();
if(v[x])continue;
v[x]=;
int i;
for(i=head[x];i;i=Next[i])
{
int y=ver[i];int z=edge[i];
if(d[y]>d[x]+z)
{
d[y]=d[x]+z;
q.push(make_pair(-d[y],y));
}
}
}
}
int main()
{
cin>>n>>a>>b;
int i;
for(i=;i<=n;i++)
{
int num;
cin>>num;
int j;
if(num==)continue;//
for(j=;j<=num;j++)
{
int temp;
scanf("%d",&temp);
if(j==)
{
add(i,temp,);
}
else
{
add(i,temp,);
}
}
}
Dijkstra();
if(d[b]!=0x3f3f3f3f)cout<<d[b];
else cout<<-;
return ;
}
洛谷P1346 电车(需要稍加思索的最短路)的更多相关文章
- 洛谷——P1346 电车
P1346 电车 题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口 ...
- 洛谷P1346 电车
P1346 电车 236通过 757提交 题目提供者yeszy 标签图论福建省历届夏令营 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 解不好啊,快疯了!!哪位大… 求解:为何除了-1的点之 ...
- 洛谷P1346 电车【最短路】
题目:https://www.luogu.org/problemnew/show/P1346 题意:n个路口,每个路口有好几条轨道,默认指向给出的第一个路口. 如果要换到另外的轨道去需要按一次开关.问 ...
- 洛谷 - P1346 - 电车 - Dijkstra/01BFS
https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...
- 洛谷 P1346 电车——dijstra
上一波题目 https://www.luogu.org/problem/P1346 是道水题 路口一开始对着的那条路权值为0 其余路权值为1 然后跑一遍最短路就好了 qwq #include<c ...
- 洛谷 P1346 电车
这道题的关键在建图 把每一个车站看成一个点,将这个车站相连的第一个车站建立一条边权为0的边,对于它所相连的其他车站,建立边权为1的边: 这样我们可以得到一张图: 起点,终点都知道了,跑一边最短路即可 ...
- 洛谷P5292 [HNOI2019]校园旅行(二分图+最短路)
题面 传送门 题解 如果暴力的话,我们可以把所有的二元组全都扔进一个队列里,然后每次往两边更新同色点,这样的话复杂度是\(O(m^2)\) 怎么优化呢? 对于一个同色联通块,如果它是一个二分图,我们只 ...
- 【洛谷 P2865】 [USACO06NOV]路障Roadblocks(最短路)
题目链接 次短路模板题. 对每个点记录最短路和严格次短路,然后就是维护次值的方法了. 和这题一样. #include <cstdio> #include <queue> #in ...
- 洛谷P2296 寻找道路 [拓扑排序,最短路]
题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
随机推荐
- 【音乐欣赏】《Abnormalize》 - 凛として時雨
曲名:Abnormalize 作者:凛として時雨 [00:00.96]誰にも見せられないもの [00:06.44]頭の中溢れて [00:11.96]間違いさえも無い世界へ [00:17.16]迷い込ん ...
- 按需引入element-ui时修改.babelrc报错
刚开始学习element-ui时用的都是完整引入,图省事,这次准备按需引入,以减小项目体积, 乙烯类npm 之后,到了修改 .babelrc 文件这一步(PS:vue-cli 2.0版本会有这个文件, ...
- web开发一些资源的在线引用地址
<!-- Bootstrap --> <link rel="stylesheet" href="https://cdn.bootcss.com/boot ...
- 安装mongo以及相关扩展
背景:看到了一个nodejs的对mongo操作的课程,于是想学一下. * 1.于是打算先在自己的vps上安装一个mongodb:[ https://docs.mongodb.org/manual/tu ...
- Linux下查看进程和端口信息
1.根据进程名查看进程信息,以查看tomcat进程名为例,查看所对应的进程id为1095(或者使用: ps -aux | grep tomcat 查看占用内存等信息) ps -ef | grep to ...
- Bash Game hdu 1846
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者 ...
- 断点调试,issubclass和ininstance的使用
一等公民 只要可以把一个东西赋值给一个变量,这个东西就叫一等公民 断点调试 在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈 变红的地方,程序执行到,就会暂停 断电应该加载报错之前 绿色箭头表示 ...
- Panda的学习之路(3)——pandas 设置特定的值&处理没有数据的部分
先设定好我们的dataframe: # pandas 设置特定的值 dates=pd.date_range(',periods=6) # print(dates) df=pd.DataFrame(np ...
- Getopt::Long - Extended processing of command line options
use Getopt::Long; my $data = "file.dat"; my $length = 24; my $verbose; GetOptions (" ...
- app内区域截图利用html2Canvals保存到手机 截屏 (html2Canvals2版本1.0.0)
html2canvas($(], {scale:,logging:false,useCORS:true}).then(function(canvas) { var dataUrl = canvas.t ...