BZOJ 1624 [Usaco2008 Open] Clear And Present Danger 寻宝之路:floyd
2024-08-24 05:15:57
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1624
题意:
农夫约翰正驾驶一条小艇在牛勒比海上航行。
海上有N(1≤N≤100)个岛屿,用1到N编号。
约翰从1号小岛出发,最后到达N号小岛。
一张藏宝图上说,如果他的路程上经过的小岛依次出现了Ai,A2,…,AM(2≤M≤10000)这样的序列(不一定相邻),那他最终就能找到古老的宝藏。
但是,由于牛勒比海有海盗出没.约翰知道任意两个岛屿之间的航线上海盗出没的概率,他用一个危险指数Dij(0≤Dij≤100000)来描述。
他希望他的寻宝活动经过的航线危险指数之和最小。
那么,在找到宝藏的前提下,这个最小的危险指数是多少呢?
题解:
floyd.
然后求从1到a[1]、a[1]到a[2]...a[m]到n的dis之和。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_M 10005 using namespace std; int n,m;
int ans=;
int a[MAX_M];
int dis[MAX_N][MAX_N]; void read()
{
cin>>n>>m;
a[]=;
a[m+]=n;
for(int i=;i<=m;i++)
{
cin>>a[i];
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
cin>>dis[i][j];
}
}
} void floyd()
{
for(int k=;k<=n;k++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(i!=j && j!=k && i!=k)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
}
} void solve()
{
floyd();
for(int i=;i<=m;i++)
{
ans+=dis[a[i]][a[i+]];
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
最新文章
- bootstrap
- 设置nginx禁止IP直接访问,只能通过指定的域名访问
- C#/net 使用Protocol Buffers入门
- IE10、IE11 User-Agent 网站无法写入Cookie 问题[转]
- Flex 列表控件中的操作
- wpf 动画 2个窗体切换
- PS基础学习 2---图层蒙版
- javascript权威指南(2)
- Linux内置命令
- redis中的aof模式,产生的是增量数据,还是全量数据?
- JAVA中的静态成员
- cocos大量对象使用动作注意事项
- BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
- LeetCode - Subtree of Another Tree
- 给浏览器和各种软件配置 http https socks5 代理 proxy
- 再议js的传递和深复制
- centos7 安装 gitolite (git服务器)
- 高通8X16电池BMS算法(二)【转】
- 具体问题:3、hibernate跟Mybatis/ ibatis 的区别,为什么选择?
热门文章
- 提高速度 history 的利用
- cookie理解
- GCD CoreData 简化CoreData操作(转)
- 【linux】CentOS编译程序报错 修复 ./Modules/_ssl.c:64:25: 致命错误:openssl/rsa.h:没有那个文件或目录
- Swagger学习和实践
- Mondiran创建连接
- Phpstorm 放大字体的快捷键是什么?
- react webapp 开发小结
- 综合运用: C++11 多线程下生产者消费者模型详解(转)
- java.lang.String中的trim()方法的详细说明(转)