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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

腾讯大战360【SPFA】

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

SSLOJ 1295 騰訊大戰(zhàn)360

    • Description--
    • Input--
    • Output--
    • Sample Input--
    • Sample Output--
    • 說明--
    • 解題思路--
    • 代碼--

Description–

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


Input–

輸入數(shù)據(jù)第一行:N和M(用空格隔開) 表示這是一個N*N的圖并且有M條邊,第二行到第M+1行 為這個圖的詳細信息。
每行共有被空格隔開的三個數(shù):a b c。表示編號為a的城市到編號為b的城市
有一個雙向邊,并且要過這條雙向邊所需要花費的時間為c。
最后一行有兩個數(shù):S和T,S表示騰訊所處的城市(也就是深圳),T表示360所處的
城市(也就是北京)

Output–

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


Sample Input–

3 3
1 2 1
2 3 1
1 3 1
1 3

Sample Output–

1


說明–

數(shù)據(jù)規(guī)模
對于%20的數(shù)據(jù) N<=10
對于%40的數(shù)據(jù) N<=50
對于%100的數(shù)據(jù) N<=300 a[i]<=300


解題思路–

正著用一次SPFA,反著再用一次,再在最大值中找最小值。


代碼–

#include<iostream> #include<cstring> #include<cstdio> using namespace std; struct emm {int x,y,next; }f[50010]; bool pd[5010]; int dis[5010],dis2[5010],dl[15010],ls[5010]; int n,m,ll,lr,le,tt,s,t,u,o,l,r=1,ans; int main() {scanf("%d%d",&n,&m);for (int i=1;i<=m;++i){scanf("%d%d%d",&ll,&lr,&le);f[++tt].x=lr; f[tt].y=le; f[tt].next=ls[ll]; ls[ll]=tt;//鄰接表f[++tt].x=ll; f[tt].y=le; f[tt].next=ls[lr]; ls[lr]=tt;//}scanf("%d%d",&s,&t);memset(dis,0x7f,sizeof(dis));dis[s]=0,dl[1]=s,pd[s]=true;while (l<r)//SPFA.1{l++,u=dl[l];for (int i=ls[u];i;i=f[i].next)if (dis[o=f[i].x]>dis[u]+f[i].y){dis[o]=dis[u]+f[i].y;if (!pd[o]){pd[o]=true;dl[++r]=o;}}pd[u]=false;}memset(dis2,0x7f,sizeof(dis2));dis2[t]=0,dl[1]=t,pd[t]=true,l=0,r=1;while (l<r)//SPFA.2{l++,u=dl[l];for (int i=ls[u];i;i=f[i].next)if (dis2[o=f[i].x]>dis2[u]+f[i].y){dis2[o]=dis2[u]+f[i].y;if (!pd[o]){pd[o]=true;dl[++r]=o;}}pd[u]=false;}ans=dis[0];for (int i=1;i<=n;++i)ans=min(ans,max(dis[i],dis2[i]));//在最大值中找最小值if(ans!=dis[0]) printf("%d",ans);else printf("Peace!");return 0; }

總結(jié)

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

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