Bessie Come Home_usaco2.4.4_floyd
2016-07-10 15:24
218 查看
[题目描述]
现在是晚餐时间,而母牛们在外面分散的牧场中。农民约翰按响了电铃,所以她们开始向谷仓走去。你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度最快的母牛)。
在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。
有时,两个牧场(可能是自我相同的)之间会有超过一条道路相连。
至少有一个牧场和谷仓之间有道路连接。
因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的 路径。
当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。
牧场被标记为’a’..’z’和’A’..’Y’,在用大写字母表示的牧场中有一只母牛,小写字母中则没有。
谷仓的标记是’Z’,注意没有母牛在谷仓中。
[输入格式]
第 1 行:整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。第 2 ..P+1行: 用空格分开的两个字母和一个整数:被道路连接牧场的标记和道路的长度(1<=长度<=1000)。
[输入样例]
5A d 6
B d 3
C e 9
d Z 8
e Z 3
[输出格式]
单独的一行包含二个项目:最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。
[输出样例]
B 11题解
很霸气地打了个spfa上去WA了回来仔细一想发现点数最多只有26+26=52个,Floyd?
可以直接用字符作为数组下标,最后找到距离’Z’最近的大写字母点就好了
代码
var map:array['A'..'z','A'..'z']of longint; procedure floyd; var i,j,k,v:char; min:longint; begin for k:='A' to 'z' do for i:='A' to 'z' do if (i<>k) then for j:='A' to 'z' do if (k<>j)and(i<>j) then if (map[i,k]+map[k,j]<map[i,j]) then map[i,j]:=map[i,k]+map[k,j]; min:=maxlongint; for i:='A' to 'Y' do if map[i,'Z']<min then begin min:=map[i,'Z']; v:=i; end; writeln(v,' ',min); end; procedure init; var n,i,w:longint; x,y,t:char; begin fillchar(map,sizeof(map),$7f div 2); readln(n); for i:=1 to n do begin readln(x,t,y,w); if map[x,y]>w then begin map[x,y]:=w; map[y,x]:=w; end; end; end; begin init; floyd; end.
相关文章推荐
- Collection共性方法
- 兼容IE的完全居中布局
- java中String类、StringBuilder类和StringBuffer类详解
- spark windows 单机 安装
- LNMP环境搭建
- LightOJ1018 Brush (IV)(状压DP)
- 如何虚拟机里安装Win8操作系统
- 使用opencv进行人脸检测
- 用正则表达式编写验证函数
- 神圣罗马帝国皇帝
- SSD: Single Shot MultiBox Detector
- HDU 1429 (bfs+状态的位压缩)
- Android开发中下拉刷新如何实现
- Singleton VS 'static class'
- Mongodb 性能测试
- ConnectivityManager 确定和监控网络连接状态
- 深度学习与自然语言处理(6)_斯坦福cs224d 一起来学Tensorflow part1
- 商城(一)
- Android Support兼容包详解
- sql增删改查封装