HDU - 2923 - Einbahnstrasse
题目:
Einbahnstrasse
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1548 Accepted Submission(s): 428
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.
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.
k . V
Where k is test case number (starting at 1,) is a space, and V is the result.
#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的更多相关文章
- HDU 2923 Relocation(状压dp+01背包)
题目代号:HDU2923 题目链接:http://poj.org/problem?id=2923 Relocation Time Limit: 1000MS Memory Limit: 65536K ...
- hdu 2923 map+Floyd 拉破车
有向图 具体方向看箭头 从起点到指定城市拉破车,一个城市可能有多个破车,一次只能拉一辆破车 也就是到了指定地点后要回到起点 假如有100辆破车 但是只有一个城市有 就得在起点与这个城市间往返100次所 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- 最短路&查分约束
[HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...
- hdu 1596 find the safest road (最短路径)
find the safest road Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
随机推荐
- luogu1070 道路游戏 单调队列
题目大意 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 nn 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 nn 个机器人工 ...
- oc40--类的启动过程
// // main.m // 类的启动过程 #import <Foundation/Foundation.h> #import "Person.h" #import ...
- ListView实现简单列表
ListView实现简单列表 效果图: 啥也没干的ListView张这样: fry.Activity01 package fry; import com.example.ListView.R; imp ...
- tflearn mnist 使用MLP 全连接网络一般都会加dropout哇
# -*- coding: utf-8 -*- """ Deep Neural Network for MNIST dataset classification task ...
- 动态规划---状压dp
状压dp,就是把动态规划之中的一个个状态用二进制表示,主要运用位运算. 这里有一道例题:蓝书P639猛兽军团1 [SCOI2005]互不侵犯 题目: 题目描述 在N×N的棋盘里面放K个国王,使他们互不 ...
- leetcode数学相关
目录 166分数到小数 169/229求众数 238除自身以外数组的乘积 69Sqrt(x) 求平方根 231Power of Two 166分数到小数 给定两个整数,分别表示分数的分子 numera ...
- 第13课 SmartGit程序操作介绍
http://www.syntevo.com/
- HttpClient短信接口
HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...
- BZOJ 4808 二分图最大独立集
思路: 棋盘是个二分图 那就把一个可以走的白点 向所有可以走的黑点连边 跑一个最大匹配 (匹配上了就代表这两个点不能共存) 最大独立集=sum-最大匹配 //By SiriusRen #incl ...
- 消除svn选定(checkout)桌面上文件显示一大堆问号。
图片: 解决方法一: 桌面右键选择TortoiseSVN——>点击Settings,如下图,选中Icon Overlays(图标覆盖),去勾选Fixed drives(本地磁盘),点击确定,按F ...