【CodeVS】p1079 回家
现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'a'..'z'和'A'..'Y',在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是'Z',注意没有母牛在谷仓中。
注意'm'和'M'不是同一个牧场否则错误上面的意思是说:输入数据中可能会同时存在M,m(郁闷ing),比如
M a a m m z
第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。
第 2 ..P+1行: 用空格分开的两个字母和一个整数:
被道路连接牧场的标记和道路的长度(1<=长度<=1000)。
单独的一行包含二个项目:最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
B 11
思路分析:读入时稍微处理一下就好,很简单,注意自己和自己不能联通。
但是,想着连连next数组,写了个SPFA,SB的全跑一遍,60,发现并不会写无向图的next!!!
还是先写正常的flyod吧。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int dis[],st[],ed[],dui[],f[],next[],point[],v[];
int n,m;
bool b[];
void MapB()
{
int i;
char a,c;
m=;
for (i=;i<=n;i++)
{
cin>>a>>c>>v[i];
if (a>='A' && a<='Z')
{
st[i]=int(a)-;
if (!b[st[i]] && a!='Z')
{
f[++m]=st[i];
b[st[i]]=false;
}
}
if (a>='a' && a<='z')
st[i]=int(a)-;
if (c>='A' && c<='Z')
{ ed[i]=int(c)-;
/* if (!b[ed[i]] && c!='Z')
{
f[++m]=ed[i];
b[ed[i]]=false;
}*/
}
if (c>='a' && c<='z')
ed[i]=int(c)-;
next[i]=point[st[i]];
point[st[i]]=i;
}
}
void mlSPFA()
{
int i,j;
int xl,now;
int h=;int t=;
int minn=;
int x;
for (i=;i<=m;i++)
{
memset(dui,,sizeof(dui));
memset(b,,sizeof(b));
memset(dis,,sizeof(dis));
h=;t=;
b[f[i]]=true;
dis[f[i]]=;
dui[]=f[i];
while(h<t)
{
h++;
now=dui[h];
xl=point[now];
while(xl!=)
{
dis[ed[xl]]=dis[now]+v[xl];
if (!b[ed[xl]])
{
dui[++t]=ed[xl];
b[ed[xl]]=true;
}
xl=next[xl];
}
b[now]=false;
}
if (dis[]<minn)
{
minn=dis[];
x=f[i];
}
}
cout<<char(x+)<<' '<<minn;
}
int main()
{
//int i;
//int n,v;
//char a,b;
cin>>n;
MapB();
mlSPFA(); }
60分只能做有向图的next数组SPFA,十分的蠢
PS1:后来又把next数组改成无向图,但因为mod了27而不是52,sb一般调了好久,又加上了重边判断,各种xxx,好像还不到60.= =
PS2:第一遍flyod90,存在重复的边,所以取权最小的。因为不耐烦判重错了好几遍,A了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int b1[][],dis[],st[],ed[],dui[],f[],v[],map[][];
int n,m,vv,minn;
bool b[];
void MapB()
{
int i,j;
char a,c;
m=;
for (i=;i<=;i++)
for (j=;j<=;j++)
map[i][j]=;
for (i=;i<=n;i++)
{
cin>>a>>c>>v[i];
if (a>='A' && a<='Z')
{
st[i]=int(a)-;
if (!b[st[i]] && a!='Z')
{
f[++m]=st[i];
b[st[i]]=false;
}
}
if (a>='a' && a<='z')
st[i]=int(a)-;
if (c>='A' && c<='Z')
{ ed[i]=int(c)-;
if (!b[ed[i]] && c!='Z')
{
f[++m]=ed[i];
b[ed[i]]=false;
}
}
if (c>='a' && c<='z')
ed[i]=int(c)-;
if (!b1[st[i]][ed[i]]|| (v[i]<map[st[i]][ed[i]]))
{
map[st[i]][ed[i]]=map[ed[i]][st[i]]=v[i];
b1[st[i]][ed[i]]=b1[ed[i]][st[i]]=true;
}
//next[i]=point[st[i]];
//point[st[i]]=i;
//next[i+n]=point[ed[i]];
//point[ed[i]]=i+n;
}
}
void mlflyod()
{
int i,j,k;
minn=;
for (k=;k<=;k++)
for (i=;i<=;i++)
for (j=;j<=;j++)
if (i!=j && i!=k && j!=k)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
for (i=;i<=;i++)
if (map[i][]<minn)
{
minn=map[i][];
vv=i;
} }
int main()
{
//int i;
//int n,v;
//char a,b;
char c;
cin>>n;
MapB();
mlflyod();
c=char(vv+);
cout<<c<<' '<<minn;
}
就那样简简单单的过了的flyod
本来是一道30min就应AC的题目,做了1天,原因:算法不熟练,考虑的太不周全,马力弱。
【CodeVS】p1079 回家的更多相关文章
- codevs 1079 回家
1079 回家 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃 ...
- codevs 1079 回家x
1079 回家 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰 ...
- 魔法禁书目录2:回家(codevs 3024)
题目描述 Description 大妈打完三战回家,我知道他是怎么回来的,欧洲到日本有L个站点他决定乘坐恰好n次飞机(不是学院都市的超音速飞机)和m次火车来从第一个站点到达最后一个站点.但是有一点很重 ...
- T1079 回家 codevs
http://codevs.cn/problem/1079/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver~死坑 题目描述 Description 现在是晚 ...
- codevs 1531 山峰
codevs 1531 山峰 题目描述 Description Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, --, n.每个山峰的高度都是不一样的.编号为i的山峰高度为hi ...
- codevs 搜索题汇总(青铜+白银级)
1792 分解质因数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 编写一个把整数N分解为质因数乘积的程序. 输入描 ...
- codevs 1063 合并果子 STL 优先队列
1063 合并果子 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codevs.cn/problem/1063/ Description 在一 ...
- Codevs 3409 搬运礼物
3409 搬运礼物 CodeVS原创 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 小浣熊松松特别喜欢交 ...
- T1063 合并果子 codevs
http://codevs.cn/problem/1063/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个 ...
随机推荐
- Delphi中exit、break、continue等跳出操作的区别
Delphi中表示跳出的有break,continue,abort,exit,halt,runerror等 1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环) ...
- Visual Studio 2015的Web扩展包
过去几年,Visual Studio扩展功能生态系统得到了蓬勃发展,社区贡献出了大量优秀的扩展,其中也包括大量针对Web开发的扩展.但是很多时候,感觉寻找.安装.更新好 几个扩展,总显得比较麻烦.如果 ...
- elasticsearch入门
到 https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.zip 下载最新包: 启动: ./elast ...
- 2-06使用SQL语句创建数据库3
向现有数据库中添加文件组和数据文件几种方式以及步骤: 第一种:在视图下添加文件组和数据文件. 添加文件组的步骤: 右击你想要添加文件组的数据库点属性,然后点文件组就可以添加. 添加数据文件的步骤: 下 ...
- 第四篇:SOUI资源文件组织
什么是资源? 现代的软件只要有UI,基本上少不了资源. 资源是什么?资源就是在程序运行时提供固定的数据源的文件. 在MFC当道的时代,资源一般就是位图(Bitmap),图标(Icon),光标(Curs ...
- 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP
1804: 有向无环图 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 187 Solved: 80[Submit][Status][Web Board ...
- Get open Popups
public IEnumerable<Popup> GetOpenPopups() { return PresentationSource.CurrentSources.OfType< ...
- Linux学习笔记(16)shell基础之Bash变量
1. 用户自定义变量 (1)变量设置规则 ① 变量名称可由字母.数字和下划线组成,但不能以数字开头: ② 变量的默认类型为字符串类型,如果要对数值运算,则必须指定变量类型为数值型: ③ 变量用等号连接 ...
- Linux环境下搭建Tomcat+mysql+jdk
Linux环境 1.下载并安装一个VMware workstation, 这个是虚拟机的平台(自行度娘下载~),虚拟机是在后面要在里面搭建Linux系统. 2.下载一个centos安装包,linux版 ...
- HDU 4821 String (HASH)
题意:给你一串字符串s,再给你两个数字m l,问你s中可以分出多少个长度为m*l的子串,并且子串分成m个长度为l的串每个都不完全相同 首先使用BKDRHash方法把每个长度为l的子串预处理成一个数字, ...