HDU Today

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 19948    Accepted Submission(s): 4705

Problem Description
经过锦囊相助,海东集团最终度过了危机。从此,HDU的发展就一直顺风顺水。到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。

这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子。開始安度晚年了。

这样住了一段时间,徐总对当地的交通还是不太了解。

有时非常郁闷。想去一个地方又不知道应该乘什么公交车。在什么地方转车,在什么地方下车(事实上徐总自己有车,却一定要与民同乐。这就是徐总的性格)。

徐总常常会问蹩脚的英文问路:“Can you help me?”。

看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?

请帮助他用最短的时间到达目的地(如果每一路公交车都仅仅在起点站和终点站停,并且随时都会开)。

 
Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);

第二行有徐总的所在地start。他的目的地end;

接着有n行,每行有站名s。站名e,以及从s到e的时间整数t(0<t<100)(每一个地名是一个长度不超过30的字符串)。

note:一组数据中地名数不会超过150个。

假设N==-1。表示输入结束。

 
Output
假设徐总能到达目的地,输出最短的时间。否则,输出“-1”。
 
Sample Input
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
 
Sample Output
50

思路:这道题事实上也就是一道模板题,只是难就难在对字符串的处理上,要专门设计一个字符串数组来存储这些地名。然后把这些地名标记为数字。

依照模板再写一遍SPFA或者DIJ就能够了。

ac代码:

#include<stdio.h>//题目就难在对字符串的问题的处理上。
#include<string.h>
#include<queue>
#define M 10010*2
#define N 220
#define INF 0x3f3f3f3f
using namespace std;
int vis[N],head[N],dis[N],n,edgenum;
char a[35],b[35],str[N][N];
struct node{
int from,to,cost,next;
}edge[M];
void init(){
edgenum=0;
memset(head,-1,sizeof(head));
}
void add(int u,int v,int cost){
node E={u,v,cost,head[u]};
edge[edgenum]=E;
head[u]=edgenum++;
}
void getmap(){//直接让1当起点,2当终点 ,然后就是往这个str数组里面存地名了。 scanf("%s%s",&a,&b);
strcpy(str[1],a);
strcpy(str[2],b);
int i,x,y,cost,j,cnt=2;
init();
for(i=1;i<=n;i++){
scanf("%s%s%d",&a,&b,&cost);
for(j=1,x=INF,y=INF;j<=cnt;j++){
if(strcmp(str[j],a)==0)
x=j;
if(strcmp(str[j],b)==0)
y=j;
if(x!=INF&&y!=INF)
break;
}
if(x==INF){
x=++cnt;
strcpy(str[x],a);
}
if(y==INF){
y=++cnt;
strcpy(str[y],b);
}
add(x,y,cost);
add(y,x,cost);
}
}
void spfa(int beg){
queue<int>q;
q.push(beg);
memset(vis,0,sizeof(vis));
memset(dis,INF,sizeof(dis));
dis[beg]=0;
vis[beg]=1;
while(!q.empty()){
int i,u=q.front();
q.pop();
vis[u]=0;
for(i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].cost){
dis[v]=dis[u]+edge[i].cost;
if(!vis[v]){
vis[v]=1;
q.push(v);
}
}
}
}
}
int main(){
while(scanf("%d",&n)!=EOF&&n!=-1){
getmap();//事实上难点就在于对字符串的处理,也就是这个函数。
if(strcmp(str[1],str[2])==0){//要注意起点和终点同样的这样的情况。
printf("0\n");
continue;
}
spfa(1);
if(dis[2]==INF)
printf("-1\n");
else
printf("%d\n",dis[2]);
}
return 0;
}

HDOJ--2112--的更多相关文章

  1. hdoj 2112 HDU Today

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2112 分析:多了一个地方的条件,用map来映射地点编号,Dijkstra求解即可 //2013-10- ...

  2. 【ZOJ】2112 Dynamic Rankings

    树状数组套主席树模板题目. /* 2112 */ #include <iostream> #include <sstream> #include <string> ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  5. HDOJ 1326. Box of Bricks 纯水题

    Box of Bricks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. FZU 2112 并查集、欧拉通路

    原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...

  7. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  8. HDOJ 1004 Let the Balloon Rise

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

  9. hdoj 1385Minimum Transport Cost

    卧槽....最近刷的cf上有最短路,本来想拿这题复习一下.... 题意就是在输出最短路的情况下,经过每个节点会增加税收,另外要字典序输出,注意a到b和b到a的权值不同 然后就是处理字典序的问题,当松弛 ...

  10. HDOJ(2056)&HDOJ(1086)

    Rectangles    HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...

随机推荐

  1. 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...

  2. [POJ1160] Post Office [四边形不等式dp]

    题面: 传送门 思路: dp方程实际上很好想 设$dp\left[i\right]\left[j\right]$表示前$j$个镇子设立$i$个邮局的最小花费 然后状态转移: $dp\left[i\ri ...

  3. 满汉全席(banquet)

    满汉全席(banquet) 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做 ...

  4. Ubuntu安装opencv with cuda

    Ubuntu安装opencv with cuda 为了运行dense flow真是折腾啊,下面网址是教程 http://blog.aicry.com/ubuntu-14-04-install-open ...

  5. docke存储

    1.Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs.volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker ...

  6. idea下载多个插件项目启动不了解决方案

    今天下载mybatis plugin插件的时候 有好多个版本的plugin,然后呢,看第二个比较热门,就下载了第二个,然后重启idea发现这个插件貌似得花钱,那算了吧,咱用第一个免费的吧,就又下载了第 ...

  7. 为图片添加文字 canvas

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. linux内核情景分析之内核中的互斥操作

    信号量机制: struct sempahore是其结构,定义如下 struct semaphore { atomic_t count;//资源数目 int sleepers;//等待进程数目 wait ...

  9. 查看windows进程,并删除

    1. 通过[任务管理器]可以查看windows进程. 有些进程不在[任务管理器]中. 2. 通过tasklist命令查看进程. 杀掉进程: epmd 进程,在停止.卸载后rabbitmq服务还在. 通 ...

  10. LeetCode OJ-- Divide Two Integers *

    https://oj.leetcode.com/problems/divide-two-integers/ 在不使用乘法.除法.求余的情况下计算除法. 使用减法计算,看看减几次. 刚开始寻思朴素的暴力 ...