日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[USACO14OPEN]GPS的决斗Dueling GPS's

發布時間:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [USACO14OPEN]GPS的决斗Dueling GPS's 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

給你一個N個點的有向圖,可能有重邊.

有兩個GPS定位系統,分別認為經過邊i的時間為Pi,和Qi.

每走一條邊的時候,如果一個系統認為走的這條邊不是它認為的最短路,就會受到警告一次T T

兩個系統是分開警告的,就是說當走的這條邊都不在兩個系統認為的最短路范圍內,就會受到2次警告.

如果邊(u,v)不在u到n的最短路徑上,這條邊就受到一次警告,求從1到n最少受到多少次警告。

輸入輸出格式

輸入格式:
Line 1: The integers N and M.
Line i describes road i with four integers: A_i B_i P_i Q_i.

輸出格式:
Line 1: The minimum total number of complaints FJ can receive if he routes himself from his house to the farm optimally.
輸入輸出樣例

輸入樣例#1: 復制
5 7
3 4 7 1
1 3 2 20
1 4 17 18
4 5 25 3
1 2 10 1
3 5 4 14
2 4 6 5
輸出樣例#1: 復制
1
說明

program df;
type point=^node;
node=record
date,ends,d1,d2:longint;
next:point;
end;
ccdd=record
x,y,z:longint;
end;
var i,j,n,m,x,y,z,k,t:longint;
path,pa,p:array[0..100000] of point;
ans:array[0..100000] of ccdd;
a,c,dis,des,d,g:array[0..100000] of longint;
tm:array[0..1000000] of longint;
b:array[0..100000] of boolean;
procedure com(x,y,z:longint);
var i:point;
begin
i:=path[x];
new(path[x]);
path[x]^.ends:=y;
path[x]^.date:=z;
path[x]^.next:=i;
end;

procedure com2(x,y,z:longint);
var i:point;
begin
i:=pa[x];
new(pa[x]);
pa[x]^.ends:=y;
pa[x]^.date:=z;
pa[x]^.next:=i;
end;

procedure com3(x,y,z1,z2:longint);
var i:point;
begin
i:=p[x];
new(p[x]);
p[x]^.ends:=y;
p[x]^.d1:=z1;
p[x]^.d2:=z2;
p[x]^.next:=i;
end;

procedure spfa(x:longint);
var i:point;
h,t,y,u:longint;
begin
fillchar(dis,sizeof(dis),$6f);
fillchar(b,sizeof(b),false);
h:=0; t:=1; tm[1]:=x; dis[x]:=0;
repeat
inc(h);
u:=tm[h];
i:=path[u];
b[u]:=false;
while i<>nil do
begin
y:=i^.ends;
if dis[y]>dis[u]+i^.date then
begin
dis[y]:=dis[u]+i^.date;
d[y]:=u;
if not b[y] then
begin
inc(t);
tm[t]:=y;
b[y]:=true;
end;
end;
i:=i^.next;
end;
until h=t;
end;

procedure spfa2(x:longint);
var i:point;
h,t,y,u:longint;
begin
fillchar(des,sizeof(des),$6f);
fillchar(b,sizeof(b),false);
h:=0; t:=1; tm[1]:=x; des[x]:=0;
repeat
inc(h);
u:=tm[h];
i:=pa[u];
b[u]:=false;
while i<>nil do
begin
y:=i^.ends;
if des[y]>des[u]+i^.date then
begin
des[y]:=des[u]+i^.date;
g[y]:=u;
if not b[y] then
begin
inc(t);
tm[t]:=y;
b[y]:=true;
end;
end;
i:=i^.next;
end;
until h=t;
end;

procedure spd(x:longint);
var i:point;
h,t,y,u,zz:longint;
begin
fillchar(b,sizeof(b),false);
fillchar(ans,sizeof(ans),$7f);
h:=0; t:=1; ans[x].x:=0; ans[x].y:=0; ans[x].z:=0; tm[1]:=x;
repeat
inc(h);
u:=tm[h];
i:=p[u];
while i<>nil do
begin
y:=i^.ends;
zz:=0;
if i^.d1>dis[u]-dis[y] then inc(zz);
if i^.d2>des[u]-des[y] then inc(zz);
if ans[y].z>ans[u].z+zz then
begin
ans[y].z:=ans[u].z+zz;
ans[y].x:=ans[u].x+i^.d1;
ans[y].y:=ans[u].y+i^.d2;
if not b[y] then
begin
inc(t);
tm[t]:=y;
b[y]:=true;
end;
end;
i:=i^.next;
end;
until h=t;
end;

begin
readln(n,m);
for i:=1 to m do
begin
read(x,y,z);
com(y,x,z);
t:=z;
readln(z);
com2(y,x,z);
com3(x,y,t,z);
end;
spfa(n);
spfa2(n);

spd(1);
writeln(ans[n].z);
end.

轉載于:https://www.cnblogs.com/Gxyhqzt/p/7784219.html

總結

以上是生活随笔為你收集整理的[USACO14OPEN]GPS的决斗Dueling GPS's的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。