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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

SSL P2133 腾讯大战360

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSL P2133 腾讯大战360 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:
有N個點,騰訊與360分別在點S,點T,給出M個a,b,c,表示點a到點b有一條連邊(雙向邊),耗時為c,他們想在最短的時間內相遇,然后干一架。,求二者“相遇”的最短時間,當然,如果無法相遇則輸出“Peace!”
在此我們定義“相遇”為:兩個人皆在同一個有編號的城市上就可以了,并且這兩個人均可以站在原地等另外一個人。也就是說,在這里我們不考慮兩人在路中間相遇。

每組數據n=5000 m=5000
并且保證運算過程中的所有值都不會超過117901063

題解:
spfa+鄰接表:
我們用點S(騰訊)到N個點的最短路跑一遍,
結果是dis[1,i]
然后點T(360)同上操作,結果是dis[2,i]
然后在max(dis[1,i],dis[2,i])找個最小值。
因為如果騰訊到點i最少要花費dis[1,i]時間,然后360到點i要話費dis[2,i]時間,這時
如果dis[1,i] < dis[2,i] 那么因為題意是允許在原地等待的,那么360和騰許在第i個點相遇的最短時間,則是dis[2,i],同理,dis[2,i] < dis[1,i]則選擇dis[1,i],等于就直接搞搞即可。
然后有N個點,每次都這么做,然后找最小值。
因此我們就得到答案:
min(max(dis[1,i],dis[2,i]))
然后注意不能相遇要輸出Peace!
時間復雜度:O(3N+2M)

varlist,s,t,w,next:array [0..10001] of longint;q:array [0..100001,1..2] of longint;dis:array [1..2,0..5001] of longint;v:array [1..2,0..5001] of boolean;x,y,z,xx,yy,i,j,n,m,d,ans:longint;procedure add(k,aa,bb,cc:longint); begins[k]:=aa;t[k]:=bb;w[k]:=cc;next[k]:=list[s[k]];list[s[k]]:=k; end;procedure spfa; varhead,tail,i:longint; beginhead:=0;tail:=1;for i:=0 to n dobegindis[1,i]:=maxlongint;dis[2,i]:=maxlongint;end;head:=0;tail:=2;dis[1,x]:=0;dis[2,y]:=0;v[1,x]:=true;v[2,y]:=true;q[1,1]:=x; q[1,2]:=1;q[2,1]:=y; q[2,2]:=2;while head<tail dobegininc(head);i:=list[q[head,1]];while i>0 dobeginif dis[q[head,2],s[i]]+w[i]<dis[q[head,2],t[i]]then begindis[q[head,2],t[i]]:=dis[q[head,2],s[i]]+w[i];if v[q[head,2],t[i]]=falsethen beginv[q[head,2],t[i]]:=true;inc(tail);q[tail,1]:=t[i];q[tail,2]:=q[head,2];end;end;i:=next[i];end;v[q[head,2],q[head,1]]:=false;end; end;function min(aa,bb:longint):longint; beginif aa>bb then exit(bb);exit(aa); end;function max(aa,bb:longint):longint; beginif aa>bb then exit(aa);exit(bb); end;beginreadln(n,m);for i:=1 to m dobeginreadln(x,y,z);inc(d);add(d,x,y,z);inc(d);add(d,y,x,z);end;ans:=maxlongint;readln(x,y);spfa;for i:=1 to n doif dis[1,i]<>maxlongint thenif dis[2,i]<>maxlongint thenans:=min(ans,max(dis[1,i],dis[2,i]));if ans=maxlongintthen writeln('Peace!')else writeln(ans); end.

總結

以上是生活随笔為你收集整理的SSL P2133 腾讯大战360的全部內容,希望文章能夠幫你解決所遇到的問題。

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