题目:

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. acdream 1414 Geometry Problem

    Geometry Problem Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)    ...

  2. Ubuntu下终端Vim编写C语言程序 AAAAA

    我是开虚拟机下的Ubuntu,装双系统又卸了,Ubuntu默认是不包含编辑器vim和编译器gcc.如果你是刚安装好的Ubuntu电脑,下面我们将来实现自己的第一个程序. 1.准备工作 首先进入root ...

  3. 【辨异】—— 可见 vs. 不可见

    1. 常见对比 物理可见,逻辑不可见: 效果可见: 对于一个文档,字符.图形可见,行.列.页呀等结构化的元素,不可见,它们各是一种逻辑组织与安排: 观念(思维方式,看待事情的方式)是不可见的,但行为是 ...

  4. E20170828-mk

    utils  工具类; 效用; 实用工具; 实用菜单; Documentation  n. 记录; 证明某事属实的证据; 参考资料; 文献的编集,文件分类; receive   vt. 收到; 接待; ...

  5. Java 位运算符 &、|、^、~、<<、>>、>>>

      撸了N久的代码,但是突然冒出来个位运算,我就蒙蔽了,这是什么?我是谁?我在干什么?我在哪? 1)闲扯 关于位运算符无非也就 与(&).或(|).异或(^).取反(~).左移(<< ...

  6. HDU2186

    2019-05-30 19:31:10 水题 #include <bits/stdc++.h> using namespace std; int main() { int c; scanf ...

  7. golang 字符串替换截取

    package main import "fmt" func main() { str := "XBodyContentX" content := str[1 ...

  8. B - IQ test

    Problem description Bob is preparing to pass IQ test. The most frequent task in this test is to find ...

  9. jQuery考试之错题分析

    获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div&quo ...

  10. Laravel5.1 学习笔记2, 路由

    安装的说明请看文档, laravel 安装 #基本路由 你将在 app/Http/routes.php 文件定义大部分路由, 这些路由将被App\Providers\RouteServiceProvi ...