【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 在一个 ...
随机推荐
- 几年前做家教写的C教程(之三专讲了递归和斐波那契)
C语言学习宝典(3) 数组: 一维数组的定义: 类型说明符 数组名[常量表达式] 例如: int a[10]; 说明:(1)数组名的命名规则和变量名相同,遵循标示符命名规则 (2)在定义数组时需要 ...
- SQL语法中的JOIN类型
这个要弄明白哟..CROSS JOIN, NATURAL, INNER JOIN ,LEFT OUTER JOIN(LEFT JOIN) 等等....带LEFT,RIGHT的必为OUTER,所以OUT ...
- Java Socket编程示例
一.Socket简介: 1.什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...
- html5拖拽
html5拖拽一 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- ortp库入门
转自:http://blog.csdn.net/suer0101/article/details/7333267 再补充一个代码走读:http://www.xuebuyuan.com/1863409. ...
- leetcode1237
date: 2015-09-09 20:20:58 Two Sum Given an array of integers, find two numbers such that they add up ...
- 【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别
注意: MERGE语句是SQL语句的一种.在SQL Server.Oracle数据库中可用,MySQL.PostgreSQL中不可用. 1>session1.merge(T entity) 合 ...
- sublime快捷键大全
转自:http://blog.useasp.net/archive/2013/06/14/sublime-text-2-all-default-Shortcuts-table-on-windows-t ...
- Linux使用du和df查看磁盘和文件夹占用空间
df df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. df -lh 参数 -h 表示使用「Human-readable」输出,也就是使用 GB.MB 等易读的格式. $ ...
- MySQL常用数据类型小结
在 MySQL 中,有三种主要的类型:字符串.数字和日期/时间类型. 目录 [隐藏] 1 字符串类型 2 数值类型 3 日期和时间类型 4 使用建议 5 艺搜参考 字符串类型 CHAR 0-255字 ...