zoukankan      html  css  js  c++  java
  • 【CF20C】Dijkstra?(DIJKSTRA+HEAP)

    没什么可以说的

    做dijk+heap模板吧

    以后考试时候看情况选择SFPA和DIJKSTRA

      1 const oo=110000000000;
      2 var vet,next,len,w:array[1..2100000]of longint;
      3     dis:array[1..1100000]of int64;
      4     a:array[1..1100000]of int64;
      5     b:array[1..1100000]of longint;
      6     inq:array[1..1000000]of boolean;
      7     head:array[1..1000000]of longint;
      8     n,m,tot,i,x,y,z,tt:longint;
      9 
     10 procedure add(a,b,c:longint);
     11 begin
     12  inc(tot);
     13  next[tot]:=head[a];
     14  vet[tot]:=b;
     15  len[tot]:=c;
     16  head[a]:=tot;
     17 end;
     18 
     19 procedure swap(var x,y:int64);
     20 var t:int64;
     21 begin
     22  t:=x; x:=y; y:=t;
     23 end;
     24 
     25 procedure shiftup(k,m:longint);
     26 begin
     27  while (k>1)and(a[k]<a[k div 2]) do
     28  begin
     29   swap(a[k],a[k div 2]);
     30   tt:=b[k]; b[k]:=b[k div 2]; b[k div 2]:=tt;
     31   k:=k div 2;
     32  end;
     33 end;
     34 
     35 procedure shiftdown(k,m:longint);
     36 var t:longint;
     37 begin
     38 
     39  while k+k<=m do
     40  begin
     41   t:=k+k;
     42   if (t+1<=m)and(a[t+1]<a[t]) then inc(t);
     43   if a[k]>a[t] then
     44   begin
     45    swap(a[k],a[t]);
     46    tt:=b[k]; b[k]:=b[t]; b[t]:=tt;
     47    k:=t;
     48   end
     49    else break;
     50  end;
     51 end;
     52 
     53 procedure print;
     54 var x,m,i,e,v:longint;
     55 begin
     56  x:=n; m:=1; w[1]:=n;
     57  while x<>1 do
     58  begin
     59   e:=head[x];
     60   while e<>0 do
     61   begin
     62    v:=vet[e];
     63    if dis[v]+len[e]=dis[x] then
     64    begin
     65     inc(m); w[m]:=v;
     66     x:=v;
     67     break;
     68    end;
     69    e:=next[e];
     70   end;
     71  end;
     72  for i:=m downto 2 do write(w[i],' ');
     73  write(w[1]);
     74 end;
     75 
     76 procedure dijkstra;
     77 var m,u,e,v:longint;
     78 begin
     79  fillchar(dis,sizeof(dis),$7f);
     80  fillchar(inq,sizeof(inq),false);
     81  m:=1; a[1]:=0; b[1]:=1; dis[1]:=0;
     82  while a[1]<oo do
     83  begin
     84   u:=b[1]; a[1]:=oo; shiftdown(1,m);
     85   if inq[u] then continue;
     86   e:=head[u]; inq[u]:=true;
     87   while e<>0 do
     88   begin
     89    v:=vet[e];
     90    if inq[v] then begin e:=next[e]; continue; end;
     91    if dis[u]+len[e]<dis[v] then
     92    begin
     93     dis[v]:=dis[u]+len[e];
     94     inc(m); a[m]:=dis[v]; b[m]:=v;
     95     shiftup(m,m);
     96    end;
     97    e:=next[e];
     98   end;
     99  end;
    100 
    101  if dis[n]>oo then writeln(-1)
    102   else print;
    103 end;
    104 
    105 begin
    106  //assign(input,'1.in'); reset(input);
    107  //assign(output,'1.out'); rewrite(output);
    108  readln(n,m);
    109  for i:=1 to m do
    110  begin
    111   readln(x,y,z);
    112   add(x,y,z);
    113   add(y,x,z);
    114  end;
    115  dijkstra;
    116  //close(input);
    117  //close(output);
    118 end.
    View Code
  • 相关阅读:
    arcgis建立拓扑分析(检验矢量图)
    矢量图面层和线层相交得到相交后的线层文件(gis相交)
    关于处理注册表权限无法修改的问题(无法打开主键或注册表项unknown)
    my.cnf配置文件
    keepalived联动mysql
    安装客户端连接软件(zabbix_agentd-filebeat-flume)
    zabbix短信配置说明
    zabbix监控工具添加网络设备Ping
    新买了硬盘,让Linux系统识别硬盘nfs---->改成xfs
    vnc软件使用
  • 原文地址:https://www.cnblogs.com/myx12345/p/5554215.html
Copyright © 2011-2022 走看看