题目:

Einbahnstrasse

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1548    Accepted Submission(s): 428

Problem Description
Einbahnstra
e (German for a one-way street) is a street on which vehicles should
only move in one direction. One reason for having one-way streets is to
facilitate a smoother flow of traffic through crowded areas. This is
useful in city centers, especially old cities like Cairo and Damascus.
Careful planning guarantees that you can get to any location starting
from any point. Nevertheless, drivers must carefully plan their route in
order to avoid prolonging their trip due to one-way streets.
Experienced drivers know that there are multiple paths to travel between
any two locations. Not only that, there might be multiple roads between
the same two locations. Knowing the shortest way between any two
locations is a must! This is even more important when driving vehicles
that are hard to maneuver (garbage trucks, towing trucks, etc.)

You
just started a new job at a car-towing company. The company has a
number of towing trucks parked at the company's garage. A tow-truck
lifts the front or back wheels of a broken car in order to pull it
straight back to the company's garage. You receive calls from various
parts of the city about broken cars that need to be towed. The cars have
to be towed in the same order as you receive the calls. Your job is to
advise the tow-truck drivers regarding the shortest way in order to
collect all broken cars back in to the company's garage. At the end of
the day, you have to report to the management the total distance
traveled by the trucks.

 
Input
Your
program will be tested on one or more test cases. The first line of
each test case specifies three numbers (N , C , and R ) separated by one
or more spaces. The city has N locations with distinct names,
including the company's garage. C is the number of broken cars. R is
the number of roads in the city. Note that 0 < N < 100 , 0<=C
< 1000 , and R < 10000 . The second line is made of C + 1 words,
the first being the location of the company's garage, and the rest being
the locations of the broken cars. A location is a word made of 10
letters or less. Letter case is significant. After the second line,
there will be exactly R lines, each describing a road. A road is
described using one of these three formats:

A -v -> B
A <-v - B
A <-v -> B

A
and B are names of two different locations, while v is a positive
integer (not exceeding 1000) denoting the length of the road. The first
format specifies a one-way street from location A to B , the second
specifies a one-way street from B to A , while the last specifies a
two-way street between them. A , ``the arrow", and B are separated by
one or more spaces. The end of the test cases is specified with a line
having three zeros (for N , C , and R .)

The test case in the example below is the same as the one in the figure.

 
Output
For each test case, print the total distance traveled using the following format:

k . V

Where k is test case number (starting at 1,) is a space, and V is the result.

 
Sample Input
4 2 5
NewTroy Midvale Metrodale
NewTroy <-20-> Midval
Midvale --50-> Bakerline
NewTroy <-5-- Bakerline
Metrodale <-30-> NewTroy
Metrodale --5-> Bakerline
0 0 0
 
Sample Output
1. 80
 
  题意:给你衣服一幅图,上面有一些点,一些有向边,一些无向边,以及边权,给你一个起点,一些目的地,目的地上面有一些破车,每一次你只可以到一个目的地回收一辆破车,到达目的地以后要把破车送回起点,求最终走的路程是多少。
  代码敲出来以后各种卡,调试了好几遍以后终于把有的bug都去掉了,用c++交上去结果ce了,检查了很久发现原来少了个string的头文件,可是g++可以编译= =。加上去以后还是一直wa,后来瞄了一眼人家的题解,想起每一个目的地不止一辆破车,虽然这个一开始也想到,但是忽略了一次一辆拖车只可以拖一辆破车。然后把每个目的地的破车的数目乘上去以后就过了= =。
 
代码:
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#define INF 1000000000
#define MAX 110
using namespace std; map<string,int> M; int dis[MAX][MAX],amount[MAX],n; void Flyod()
{
int i,j,u;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(dis[i][j]<=) dis[i][j]=INF;
if(i==j) dis[i][j]=;
}
}
for(u=;u<=n;u++)
{
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
int len=dis[i][u]+dis[u][j];
if(dis[i][j]>len) dis[i][j]=len;
}
}
}
/*
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(dis[i][j]<INF) printf("%d ",dis[i][j]);
else printf("INF ");
}
printf("\n");
}
*/
} int main()
{
int i,v,c,r,t,a,b,sum;
char ch[];
string s1,s2;
t=;
//freopen("data.txt","r",stdin);
while(scanf("%d %d %d",&n,&c,&r),(n+c+r))
{
//printf("%d %d %d\n",n,c,r);
t++;
c++;
M.clear();
memset(amount,,sizeof(amount));
n=;
for(i=;i<=c;i++)
{
cin>>s1;
if(M.count(s1)<=)
{
M[s1]=n++;
}
amount[M[s1]]++;
}
c=n-;
memset(dis,,sizeof(dis));
while(r--)
{
cin>>s1;
if(M.count(s1)<=) M[s1]=n++;
a=M[s1];
scanf("%s",ch);
cin>>s2;
if(M.count(s2)<=) M[s2]=n++;
b=M[s2];
sscanf(ch+,"%d",&v);
int len=strlen(ch);
if(ch[len-]=='>')
{
if(dis[a][b]== || dis[a][b]>v) dis[a][b]=v;
}
if(ch[]=='<')
{
if(dis[b][a]== || dis[b][a]>v) dis[b][a]=v;
}
}
n--;
Flyod();
sum=;
for(i=;i<=c;i++)
{
sum+=(dis[][i]+dis[i][])*amount[i];
}
printf("%d. %d\n",t,sum);
}
return ;
}

2923

 

HDU - 2923 - Einbahnstrasse的更多相关文章

  1. HDU 2923 Relocation(状压dp+01背包)

    题目代号:HDU2923 题目链接:http://poj.org/problem?id=2923 Relocation Time Limit: 1000MS Memory Limit: 65536K ...

  2. hdu 2923 map+Floyd 拉破车

    有向图 具体方向看箭头 从起点到指定城市拉破车,一个城市可能有多个破车,一次只能拉一辆破车 也就是到了指定地点后要回到起点 假如有100辆破车 但是只有一个城市有 就得在起点与这个城市间往返100次所 ...

  3. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  4. hdu图论题目分类

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  5. HDU图论题单

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  6. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  7. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  8. 最短路&查分约束

    [HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...

  9. hdu 1596 find the safest road (最短路径)

    find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. luogu1357 花园 状态压缩 矩阵快速幂

    题目大意 小L有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为1~N(2<=N<=10^15).他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则,任意相邻M(2<= ...

  2. Linux gadget驱动分析1------驱动加载过程

    为了解决一个问题,简单看了一遍linux gadget驱动的加载流程.做一下记录. 使用的内核为linux 2.6.35 硬件为芯唐NUC950. gadget是在UDC驱动上面的一层,如果要编写ga ...

  3. B2241 打地鼠 暴力模拟

    大水题!!!30分钟AC(算上思考时间),直接模拟就行,加一个判断约数的剪枝,再多加几个剪枝就可以过(数据巨水) 我也就会做暴力的题了. 题干: Description 打地鼠是这样的一个游戏:地面上 ...

  4. 【转】UINavigationController 直接返回到第一级目录

    原文网址:http://blog.csdn.net/justinjing0612/article/details/7360852 [self.navigationController popViewC ...

  5. zoj3478

    最短路 吐槽一下...最先开始写了个地图哈希,6kb,然后不是正解,又写了个spfa,4kb,还是不对,无奈抄标程,结果把spfa改成dijiestra就对了... 由于只有两个变量,所以我们设一个四 ...

  6. 用JS将指定时间转化成用户当地时区的时间

    公司的项目是面向海外用户的,但是最初的设计没考虑到时差问题,存入数据库的时间都是东八区的时间,导致现在补救有点坑爹...... 有一个需求是,产品详细页需要注明此款产品的开售时间,当海外的用户来访问这 ...

  7. ZOJ2477 Magic Cube

    题目: This is a very popular game for children. In this game, there's a cube, which consists of 3 * 3 ...

  8. Cookie、Token与Session介绍(非原创)

    文章大纲 一.Cookie介绍二.Token介绍三.Session介绍四.Token.Cookie与Session比较五.参考文章   一.Cookie介绍 1. Cookie是什么 cookie机制 ...

  9. python重定向原理及实例

    1. 前言 为了在Python编程中, 利用控制台信息, 我们需要对控制台输出进行接管(重定向).在Python中,控制台输出的接口是sys.stdout,通过分析print与sys.stdout之间 ...

  10. 数组中hashCode就是内存地址,以及汉字幻化为16进制或10进制

    int[] arr4={1,2,3,4,5}; System.out.println("arr4: "+arr4); System.out.println("arr4.h ...