zoukankan      html  css  js  c++  java
  • bzoj1624 寻宝之路

    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

     
        最小的危险指数和.

    Sample Input

    3 4
    1
    2
    1
    3
    0 5 1
    5 0 2
    1 2 0

    INPUT DETAILS:

    There are 3 islands and the treasure map requires Farmer John tovisit a sequence of 4 islands in order: island 1, island 2, island1 again, and finally island 3. The danger ratings of the paths aregiven: the paths (1, 2); (2, 3); (3, 1) and the reverse paths havedanger ratings of 5, 2, and 1, respectively.


    Sample Output

    7

    OUTPUT DETAILS:

    He can get the treasure with a total danger of 7 by traveling inthe sequence of islands 1, 3, 2, 3, 1, and 3. The cow map's requirement(1, 2, 1, and 3) is satisfied by this route. We avoid the pathbetween islands 1 and 2 because it has a large danger rating.
     
     
    看到是floyd感觉好久没有写过了就水一发。
    结果maxm写成maxn。智障错误第二次:手打堆
     
    //Serene
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int maxn=100+10,maxm=1e4+10;
    int n,m,a[maxm];//
    long long dis[maxn][maxn],ans;
    
    long long aa;char cc;
    long long read() {
    	aa=0;cc=getchar();
    	while(cc<'0'||cc>'9') cc=getchar();
    	while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
    	return aa;
    }
    
    int main() {
    	n=read();m=read();a[0]=1;
    	for(int i=1;i<=m;++i) a[i]=read();a[m+1]=n;
    	for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dis[i][j]=read();
    	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]);
    	for(int i=0;i<=m;++i) ans+=dis[a[i]][a[i+1]];
    	cout<<ans;
    	return 0;
    }
    

      

     
    弱者就是会被欺负呀
  • 相关阅读:
    python学习笔记(二)
    python学习笔记(四)
    首个python程序,一个猜数字的小游戏 ^0^
    python生成随机数
    python生成随机数
    python学习笔记(四)
    我的书《编写高质量代码—Web前端开发修炼之道》面市了,请大家多多支持
    python学习笔记(三)
    EasyNVR纯H5摄像机直播解决方案前端解析之:RTSP安防监控实时直播的网页H5自动播放方案
    基于EasyNVR实现RTSP_Onvif监控摄像头Web无插件化直播监控
  • 原文地址:https://www.cnblogs.com/Serene-shixinyi/p/7545045.html
Copyright © 2011-2022 走看看