BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 尋寶之路

來源:互聯網
上載者:User

標籤:des   style   blog   color   io   ar   for   資料   div   

Description

    農夫約翰正駕駛一條小艇在牛勒比海上航行.

    海上有N(1≤N≤100)個島嶼,用1到N編號.約翰從1號小島出發,最後到達N號小島.一

張藏寶圖上說,如果他的路程上經過的小島依次出現了Ai,A2,…,AM(2≤M≤10000)這樣的序列(不一定相鄰),那他最終就能找到古老的寶藏.  但是,由於牛勒比海有海盜出沒.約翰知道任意兩個島嶼之間的航線上海盜出沒的機率,他用一個危險指數Dij(0≤Dij≤100000)來描述.他希望他的尋寶活動經過的航線危險指數之和最小.那麼,在找到寶藏的前提下,這個最小的危險指數是多少呢? Input

    第1行輸入N和M,之後M行一行一個整數表示A序列,之後輸入一個NxN的方陣,表示兩兩島嶼之間航線的危險指數.資料保證Dij=Dji,Dii=0. Output

    最小的危險指數和.

題解:

因為要依次出現,從Ai到Ai+1,其中走的一定是它倆之間的最短路,所以可以對整個圖Floyd。然後將兩兩之間最短路加起來就是答案。

代碼:

#include<cstdio>#include<cstring>#include<algorithm>//by zrt//problem:using namespace std;int n;int dis[105][105]; int m,a[10005];int main(){    #ifdef LOCAL    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);    #endif    scanf("%d%d",&n,&m);    for(int i=1;i<=m;i++){        scanf("%d",&a[i]);    }    for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            scanf("%d",&dis[i][j]);        }    }    for(int k=1;k<=n;k++){        for(int i=1;i<=n;i++){            for(int j=1;j<=n;j++){                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);            }        }    }    long long ans=0;    for(int i=2;i<=m;i++){        ans+=dis[a[i-1]][a[i]];    }    printf("%lld\n",ans);         return 0;}

BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 尋寶之路

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.