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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8.12 腾讯大战360 2133

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.12 腾讯大战360 2133 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  • 題目
  • 題解
  • 代碼

題目

2010年11月3日,是一個(gè)難忘的日子。 騰訊發(fā)布消息:存360則,不留QQ。留QQ,則須卸360。 360則表示360與QQ可以共存。 這也就標(biāo)志著騰訊與360的大戰(zhàn)就此開始!
現(xiàn)在,騰訊與360由于身處異地,非常迫切地想在最短的時(shí)間內(nèi)相遇,然后干一架。但是由于雙方的技術(shù)員都在努力地編程序想干掉對(duì)方,所以他們希望你來幫他們找到一個(gè)最好的方案使得相遇的時(shí)間最短。
在此我們定義“相遇”為:兩個(gè)人皆在同一個(gè)有編號(hào)的城市上就可以了,并且這兩個(gè)人均可以站在原地等另外一個(gè)人。也就是說,在這里我們不考慮兩人在路中間相遇。

[數(shù)據(jù)范圍]每組都是n=5000 m=5000 并且保證運(yùn)算過程中的所有值都不會(huì)超過117901063

輸出只有一行,D,表示二者“相遇”的最短時(shí)間。當(dāng)然,如果無法相遇則輸出“Peace!”

題解

一道很水很水的,SPFA
嗯,真的很水
至于為什么早上沒過,純屬傻了————
明明只用做一遍的東西,為什么做了n遍?是嫌時(shí)間太多么?(并沒有,是忘記了只用做一遍)
QAQ,我的分啊!Orz。。。。。

現(xiàn)在才是題解
因?yàn)樾枰寖扇讼嘤鲈谝粋€(gè)點(diǎn)上,所以可以做一遍從騰訊所在城市的SPFA,然后做一遍從360開始的SPFA,接著枚舉n個(gè)點(diǎn),找最小的max(d[i],dz[i]),即為答案
因?yàn)槭莾蓚€(gè)人,所以時(shí)間應(yīng)取兩人到達(dá)當(dāng)前點(diǎn)最短路中的最大值

時(shí)間復(fù)雜度O(n+m)

代碼

typearr=array[0..100000]of longint; varn,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; beginif a>b then exit(a) else exit(b); end;procedure spfa(var d:arr;s:longint); vari,j,k,h,tail:longint; beginfillchar(b,sizeof(b),true);h:=0;tail:=1;v[1]:=s;d[s]:=0;b[s]:=false;while h<tail dobegininc(h);k:=ls[v[h]];while k>0 dobeginif d[v[h]]+w[k]<d[y[k]] thenbegind[y[k]]:=d[v[h]]+w[k];if b[y[k]] thenbegininc(tail);b[y[k]]:=false;v[tail]:=y[k];end;end;k:=ne[k];end;b[v[h]]:=true;end; end;beginreadln(n,m);for i:=1 to m dobegininc(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 dobeginj:=max(d[i],dz[i]);if j<ans then ans:=j;end;if ans<>d[0] then writeln(ans) else writeln('Peace!'); end.

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。