8 12 騰訊大戰360 2133

2021-08-06 03:01:06 字數 1733 閱讀 7213

[資料範圍]每組都是n=5000 m=5000 並且保證運算過程中的所有值都不會超過117901063

輸出只有一行,d,表示二者「相遇」的最短時間。當然,如果無法相遇則輸出「peace!」

一道很水很水的,spfa

嗯,真的很水

至於為什麼早上沒過,純屬傻了————

明明只用做一遍的東西,為什麼做了n遍?是嫌時間太多麼?(並沒有,是忘記了只用做一遍)

qaq,我的分啊!orz。。。。。

時間複雜度o(n+m)

type

arr=array[0..100000]of longint;

var n,m,i,j,k,s,t,ans:longint;

x,y,w,v,ls,ne,d,dz:arr;

b:array[0..10000]of boolean;

function

max(a,b:longint):longint;

begin

if a>b then

exit(a) else

exit(b);

end;

procedure

spfa

(var d:arr;s:longint);

var i,j,k,h,tail:longint;

begin

fillchar(b,sizeof(b),true);

h:=0;tail:=1;v[1]:=s;d[s]:=0;b[s]:=false;

while hdo

begin

inc(h);

k:=ls[v[h]];

while k>0

dobegin

if d[v[h]]+w[k]then

begin

d[y[k]]:=d[v[h]]+w[k];

if b[y[k]] then

begin

inc(tail);

b[y[k]]:=false;

v[tail]:=y[k];

end;

end;

k:=ne[k];

end;

b[v[h]]:=true;

end;

end;

begin

readln(n,m);

for i:=1

to m do

begin

inc(j);

readln(x[j],y[j],w[j]);

ne[j]:=ls[x[j]];ls[x[j]]:=j;

inc(j);

x[j]:=y[j-1];y[j]:=x[j-1];w[j]:=w[j-1];

ne[j]:=ls[x[j]];ls[x[j]]:=j;

end;

ans:=maxlongint;

readln(s,t);

fillchar(d,sizeof(d),$7f);

spfa(d,s);

fillchar(dz,sizeof(dz),$7f);

spfa(dz,t);

for i:=1

to n do

begin

j:=max(d[i],dz[i]);

if jthen ans:=j;

end;

if ans<>d[0] then writeln(ans) else writeln('peace!');

end.

騰訊與360大戰

致廣大qq使用者的一封信 親愛的qq使用者 當您看到這封信的時候,我們剛剛作出了乙個非常艱難的決定。在360公司停止對qq進行外掛程式侵犯和惡意詆毀之前,我們決定將在裝有360軟體的電腦上停止執行qq軟體。我們深知這樣會給您造成一定的不便,我們誠懇地向您致歉。同時也把作出這一決定的原因寫在下面,盼望...

TYVJ1356(騰訊大戰360)

演算法 最短路 求兩遍最短路,乙個是從起點走向終點,另乙個從終點走向起點,記錄下每次走每個點的最短路,然後列舉一遍,對於每個點,找乙個最大的最短路看能否更新min。program p1356 const maxn 10000 type atp record y,dis,next longint en...

SSL ZYC 2133 騰訊大戰360

題目大意 兩個人分別在s和e這兩個點上,已知兩人可以同時行走,且他們的相遇地必須是乙個點 不能在路上相遇 那麼他們最短相遇時間是多少?思路 這道題很明顯是一道並查集 最短路問題。先用並查集求出兩點之間是否有通路,再跑兩次dij,列舉每乙個點,求出他們兩人中用時較長的最小值。這道題也可以用spfa。而...