USACO 2.4.4 Bessie Come Home 回家(最短路)
Description
现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是自我相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'a'..'z'和'A'..'Y',在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是'Z',注意没有母牛在谷仓中。
Input
第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。 第 2 ..P+1行: 用空格分开的两个字母和一个整数: 被道路连接牧场的标记和道路的长度(1<=长度<=1000)。
Output
单独的一行包含二个项目: 最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。
Sample Input
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
Sample Output
B 11 解题思路:最短路问题,因为牧场最多只有52个,可以看出多源最短路,使用Floyd算法;但同样的是终点只有一个,要求的是所有起点到终点中的
最短路,我们完全可以反其道而行之,看出单源最短路问题,将终点看出起点,使用Dijkstra算法,利用其中的dis[]数组,找到终点到起点各点中
距离最短的即可。 Floyd算法
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int INF =1e8;
using namespace std;
int n;
int flag[];
int maps[][];
void Floyd()
{
int i,j,k;
for (k = 'A'; k <= 'z'; k++)
{
for (i = 'A'; i <= 'z'; i++)
{
for (j = 'A'; j <= 'z'; j++)
{
maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]);
}
}
}
}
int main()
{
char a,b;
int c,i,j;
int ans = INF;
char ans1;
for (i='A';i<='z';i++)
{
for (j ='A';j<='z';j++)
{
if (i!=j)
{
maps[i][j]=INF;
}
}
}
scanf("%d",&n);
getchar();
for (i = ; i <= n; i++)
{ scanf("%c %c",&a,&b);
scanf("%d",&c);
getchar();
if (a >= 'A' && a <= 'Z')
{
flag[a] = ;
}
if (b >= 'A' && b <= 'Z')
{
flag[b]=;
}
maps[a][b]=maps[b][a]=min(c,maps[a][b]);
}
Floyd();
for (i ='A'; i<='Y'; i++)
{
if (flag[i]&&maps[i]['Z']<ans)
{
ans = maps[i]['Z'];
ans1 = char(i);
}
}
printf("%c %d\n",ans1,ans);
return ;
}
Dijkstra算法
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int INF =1e8;
using namespace std;
int n;
int vis[];
int flag[];
int dis[];
int maps[][];
void Dijstra()
{
int i,j,pos=,mins,sum=;
for(i='A'; i<='z'; ++i)
{
dis[i]=maps[][i];
}
vis[]=-;
dis[]=;
for(i='A'; i<'z'; i++)
{
mins=INF;
for(j='A'; j<='z'; ++j)
{
if(!vis[j]&&mins>dis[j])
{
mins=dis[j];
pos=j;
}
}
vis[pos]=-;
for(j='A'; j<='z'; ++j)
{
if(!vis[j]&&dis[j]>dis[pos]+maps[pos][j])
{
dis[j]=dis[pos]+maps[pos][j];
}
}
}
return ;
}
int main()
{
char a,b;
int c,i,j;
int ans = INF;
char ans1;
memset(vis,-,sizeof(vis));
for (i='A'; i<='z'; i++)
{
for (j='A'; j<='z'; j++)
{
if(i!=j)
{
maps[i][j]=INF;
}
else
{
maps[i][i]=;
}
}
}
scanf("%d",&n);
getchar();
for (i = ; i <= n; i++)
{ scanf("%c %c",&a,&b);
scanf("%d",&c);
getchar();
for(j='A';j<='z';j++)
{
vis[a]=;
}
for(j='A';j<='z';j++)
{
vis[b]=;
}
maps[a][b]=maps[b][a]=min(c,maps[a][b]);
}
Dijstra();
ans=INF;
for(i='A';i<='Y';i++)
{
if(dis[i]<ans)
{
ans=dis[i];
ans1=i;
}
}
printf("%c %d\n",ans1,ans);
return ;
}
USACO 2.4.4 Bessie Come Home 回家(最短路)的更多相关文章
- 【USACO 2.4 】Bessie Come Home
题意:给出n条有权的双向边(10000),求到达Z最近的大写字母,及其距离. 题解:即求Z出发的最短路,用dijstra就可以了,注意边要开到20000以上. /* TASK: comehome LA ...
- USACO Section 2.4: Bessie Come Home
因为题目给了边的信息,所以比较适用bell-man的方法 /* ID: yingzho1 LANG: C++ TASK: comehome */ #include <iostream> # ...
- Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★ 输入文件:butter.in 输出文件 ...
- Bessie的体重问题
P1028 Bessie的体重问题 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 8TH 描述 Bessie像她的诸多姊妹一样,因 ...
- USACO 完结的一些感想
其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...
- [codevs2170]悠闲的漫步
题目来源 http://codevs.cn/problem/2170/ http://www.tyvj.cn/p/1033 背景 USACO OCT09 5TH 描述 Bessie透过牛棚的大门向外望 ...
- [TYVJ] P1023 奶牛的锻炼
奶牛的锻炼 背景 Background USACO 描述 Description 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加 ...
- tyvj 1027 木瓜地 简单模拟
P1027 木瓜地 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 4TH 描述 Bessie不小心游荡出Farmer John的田地 ...
- 算法复习———dijkstra求次短路(poj3255)
题目: Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...
随机推荐
- ssm多数据源的操作
公司要求,需要使用两个数据库,一个mysql,一个oracle.所以需要配置两个数据库来进行操作. 1.首先,需要在jdbc.properties文件中将两个库的配置数据写入,不过一个写driver, ...
- MongoDB DBA 实践3-----安装mongdb4.0发生错误
在安装mongodb时,常常会出现一些错误,导致无法安装完全,下面则是各种错误与它们的解决方法: 1.在window机安装mongodb4.0, 其中的一种:由于缺失系统补丁,而导致无法完全安装,具体 ...
- C# 操作word 模板 值 替换
1.引用 aspose.words dll 2.word 使用doc 3.给word 模板中添加要替换位置的 书签 .引用 aspose.words dll .word 使用doc .给word ...
- java-spark的各种常用算子的写法
通常写spark的程序用scala比较方便,毕竟spark的源码就是用scala写的.然而,目前java开发者特别多,尤其进行数据对接.上线服务的时候,这时候,就需要掌握一些spark在java中的使 ...
- 用Python批量下载DACC的MODIS数据
本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...
- SQL注入总结篇
分类SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入.报错注入和盲注. 可显注入攻击者可以直接在当前界面内容中获取想要获得的内容. 报错注入数据库查询返回结果并没有在页面中显 ...
- 20155331 《信息安全技术概论》实验二 Windows口令破解
20155331 <信息安全技术概论>实验二 Windows口令破解 [实验目的] 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 [实验原理] 口令破 ...
- Mac 用Ctr+C复制,Ctr+V 粘贴
用习惯Windows的用户,进入Mac,不习惯快捷方式. 用下面的方法,可以返回windows 习惯. 1.进入系统偏好设置->键盘->修饰键 2.Control 选择 Command,C ...
- 优步uber司机申请了为什么一直没有通过审核,帐号也显示未激活
优步uber现在是越来越火,申请注册成为优步uber司机的人数也日剧增多,申请了的车主都知道,申请后要等待审核,审核通过才可以激活帐号,快的运气好的,三五天不到一个星期就激活了,慢点的得大半个月,还有 ...
- 【SAP BI】BW如何连接SQLSERVER数据库
一.工具 源版本: SQLSERVER2008 数据库TEST 目标版本: SAP 客户端 7.4 服务器7.5 二.在BW中建立数据库连接,并生成数据源 2.1 登录SAP BW开发机 ,输 ...