CODEVS1079 回家 (最短路)

  真是语死早,题目看了两遍才看懂。

  按照题目要求建边,从‘Z‘开始跑最短路即可。

 

Program CODEVS1079;
var a:array[0..1000,0..1000] of longint;
    d:array[0..1000] of longint;
    pd:array[0..1000] of boolean;
    flag:array[0..1000] of boolean;
    b:array[0..10000] of longint;
    ch,space,ch2,ans:char;
    i,j,m,x,min:longint;
procedure spfa(s:longint);
var i,j,l,r,u,v:longint;
begin
  fillchar(pd,sizeof(pd),false);
  fillchar(b,sizeof(b),0);
  fillchar(d,sizeof(d),$7f);
  l:=1; r:=1; pd[s]:=true; b[l]:=s; d[s]:=0;
  while l<=r do
    begin
      u:=b[l];
      for v:=ord(‘A‘) to ord(‘z‘) do
        if (a[u,v]<10000) and (d[u]+a[u,v]<d[v]) then
          begin
            d[v]:=d[u]+a[u,v];
            if not pd[v] then
              begin
                inc(r);
                b[r]:=v;
                pd[v]:=true;
              end;
          end;
      inc(l);
      pd[u]:=false;
    end;
end;
begin
  fillchar(flag,sizeof(flag),false);
  fillchar(a,sizeof(a),$7f);
  readln(m);
  for i:=1 to m do
    begin
      readln(ch,space,ch2,space,x);
      if x>a[ord(ch),ord(ch2)] then continue;
      a[ord(ch),ord(ch2)]:=x;
      a[ord(ch2),ord(ch)]:=x;
      flag[ord(ch)]:=true;
      flag[ord(ch2)]:=true;
    end;
    min:=maxlongint;
  spfa(ord(‘Z‘));
  for i:=ord(‘A‘) to ord(‘Y‘) do
    if flag[i] then
      if d[i]<min then
        begin
          ans:=chr(i);
          min:=d[i];
        end;
  writeln(ans,‘ ‘,min);
end.
时间: 2024-10-10 18:30:34

CODEVS1079 回家 (最短路)的相关文章

Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路

2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] Description Input Output Sample Input 2 1 1 2 1 1 2 2 Sample Output 5 HINT N<=20000,M<=100000 Source dijkstra+堆优化+分层图 把所有的横向和纵向分开看.跑最短路即可. 注意:N这么大,不能写

【日常学习】【最短路Dijkstra】codevs1069 usaco回家 题解

来源 usaco codevs1069 题目描述 Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此

洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 &amp;&amp; 乱搞

题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径. 当然,

[SHOI2012]回家的路 最短路

---题面--- 题解: 吐槽:找了好久的错,换了n种方法,重构一次代码,,,, 最后发现,,, 数组开小了,其实一开始尝试开大了数组,但唯独没有尝试开大手写队列的数组.... 思路: 有两种方法,这里都介绍一下吧,分别在时间复杂度和代码复杂度上各有优势. 第一种:时间复杂度更优,代码复杂 观察到转弯时需要多消耗1的费用,不转弯则不用.因此我们记录一个last表示这个点的最短路是从哪走来的.(其实就是记录路径) 然后注意到A ---> C 与A ---> B ---> C是等效的,因此我

Bessie Come Home 回家(最短路)

Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是自我相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最

洛谷P1529 回家 Bessie Come Home

P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛

hdu----(4522)湫湫系列故事——过年回家(最短路)

湫湫系列故事——过年回家 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1095    Accepted Submission(s): 226 Problem Description 出门在外,最想念的还是家,对在深圳腾讯工作的HR湫湫来说,春节回家是一年中最期盼的事,不仅可以见到阔别已久的亲人,还能以相亲的名义调侃众多帅哥(她的内心告诉她

[kuangbin带你飞]专题四 最短路练习

A. POJ 2387  Til the Cows Come Home 模板题. #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<string> #include<map> #include<queue> #in

HDU - 1142 A Walk Through the Forest (DP + 最短路)

题目大意:有一个人工作完了,要回家了.家在节点2,办公室在节点1.如果选择A回家的最短路比选择B回家的最短路小,那么他就可以走A点回家,问这个人有多少种回家的方法 解题思路:先跑一遍最短路,求出每个节点到家的最短距离,然后进行判断 设dp[i]为从i点到家有多少种方法,如果d[i] > d[j](d数组表示到家的最短距离) 那么dp[i] += dp[j] #include <cstdio> #include <cstring> #include <algorithm&