博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10099 - The Tourist Guide
阅读量:4951 次
发布时间:2019-06-11

本文共 1173 字,大约阅读时间需要 3 分钟。

这道题要使游客从一个点到另一个点,求最小的趟数,我们用floyd算法将所有路径中的最小边的

最大值求出来,然后用计算trips就行了。求最小边的最大值的方程为:

d[i][j]=max{d[i][j],min{d[i][k],d[k][j]}}

初始化:所有 d[i][j]=0;

 

#include
#define MAXD 110 int u, v, w, S, D, T, R, N; int d[MAXD][MAXD]; int min( int a, int b) {
return a < b ? a : b; } void init() {
for( int i = 1; i <= N; i ++) for( int j = 1; j <= N; j ++) d[i][j] = 0; for( int i = 1; i <= R; i ++) {
scanf( "%d%d%d", &u ,&v, &w); d[u][v] = d[v][u] = w; } } void floyd() {
for( int k = 1; k <= N; k ++) for( int i = 1; i <= N; i ++) for( int j = 1; j <= N; j ++) if( min(d[i][k], d[k][j]) > d[i][j]) d[i][j] = min( d[i][k], d[k][j]); } int main() {
int cas = 0; while( true) {
scanf( "%d%d", &N, &R); if( N == 0 && R == 0) break; init(); floyd(); scanf( "%d%d%d", &S, &D, &T); int ans; ans = T / (d[S][D] - 1); if( T % (d[S][D] - 1) != 0) ans++; printf("Scenario #%d\n", ++cas); printf("Minimum Number of Trips = %d\n", ans); printf("\n"); } return 0; }

转载于:https://www.cnblogs.com/Yu2012/archive/2011/11/28/2266644.html

你可能感兴趣的文章
JavaScript笔记——正则表达式
查看>>
iOS PushMebaby
查看>>
网页消息类
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
日常一些出现bug的问题
查看>>
同时启动多个tomcat服务器
查看>>
怎么将iphone上的照片导出到本地文件
查看>>
Repeater+DataPagerSource分页
查看>>
模块化导出
查看>>
pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
查看>>
Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
查看>>
pod
查看>>
ResultSet 可滚动性和可更新性
查看>>
VS2013 C++代码运行问题
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
LUOGU P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
查看>>
toad for oracle中文显示乱码
查看>>
scala的REPL shell的调用
查看>>
SQL中Group By的使用
查看>>
Mybatis映射原理,动态SQL,log4j
查看>>