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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Vijos P1423 最佳路线

發布時間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vijos P1423 最佳路线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Vijos P1423

題目描述

年久失修的賽道令國際汽聯十分不滿。汽聯命令主辦方立即對賽道進行調整,否則將取消其主辦權。主辦方當然必須馬上開始行動。
賽道測評人員經過了三天三夜的數據采集,選出了若干可以使用的道路和各道路行駛所需的時間。這些道路包括若干直道和彎道,每個直道連接兩個不同的彎道且為單向,兩個彎道之間可能有多條直道,通過直道和彎道都需要一定的時間。主辦方打算在這些可用道路中選出一部分作為賽道。賽道是由直道和彎道交替組成的一圈,賽道可多次經過同一條彎道,因為主辦方可以通過架設立交橋的方法避免撞車。為了使比賽更加精彩,主辦方希望選擇一條單圈時間最短的賽道,由于觀眾席的位置在彎道1,所以賽道必須經過彎道1(賽道至少要包含一條直道)。

輸入格式

第一行是兩個整數n,m(1<=n<=200,1<=m<=100000),分別表示彎道數和直道數。接下來n行,第i行是一個整數ai(1<=ai<=1000),表示通過第i個彎道所消耗的時間。接下來m行,第j行是三個整數xj,yj,bj(1<=xj,yj<=n,1<=bj<=1000),表示從彎道xj到彎道yj有一條單向直道,且通過該直道所消耗的時間為bj。

輸出格式

一個整數s,表示單圈時間最短的賽道的單圈時間,若無解則輸出-1。

樣例輸入1

3 6
1
1
2
1 2 3
2 3 5
3 1 1
3 2 1
2 1 10
1 3 15

樣例輸出1

13

樣例輸入2

3 4
1
1
2
1 2 4
1 3 5
2 3 5
3 2 10

樣例輸出2
-1

這道題是一個十分標準的弗洛伊德(floyd)題目,只需要將彎道作為點即可,而彎道的權值放到初度入度均能解決問題。

為了方便大家理解,提供圖片如下(我將權值放到了出度里)

樣例輸入1


我們可以看到,最短環路為1->2->->3->1,值為13;

樣例輸入2


我們可以看到,并沒有一條經過一的回路,所以無解。

C++實現方法

#include <stdio.h> #include <string.h> int a[210][210],b[210]; int min(int a,int b) {if(a<b) return a;else return b; } int n,m; int main() {memset(a,0x3f,sizeof(a));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&b[i]);for(int i=1;i<=m;i++){int c,d,e;scanf("%d%d%d",&c,&d,&e);if(a[c][d]==0x3f3f3f3f) a[c][d]=b[c]+e;else if(a[c][d]>b[c]+e) a[c][d]=b[c]+e;}for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)a[i][j]=min(a[i][k]+a[k][j],a[i][j]);if(a[1][1]<0x3f3f3f3f)printf("%d",a[1][1]);else printf("-1");return 0; }

總結

以上是生活随笔為你收集整理的Vijos P1423 最佳路线的全部內容,希望文章能夠幫你解決所遇到的問題。

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