快递

Time limit 8000 ms

Memory limit 131072 kB

Problem Description

你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处。而且岛上只有一条船,下次想走水路还是得回到X处才行;两个镇子之间可能有两条以上的水路或旱路;邮递员必须按照清单上的镇子顺序送快递(镇子可能重复,并且对于重复的镇子不允许一次性处理,比如ABCB的话B一定要按顺序走两次才行)。

测试数据有多组:

N M

x1 y1 t1 sl1

x2 y2 t2 sl2

xM yM tM slM

R

z1 z2 … zR

N (2 ≤ N ≤ 200) 是镇子的数量,M (1 ≤ M ≤ 10000) 是旱路和水路合计的数量。从第2行到第M + 1行是路径的描述,路径连接xi yi两地,路径花费 ti (1 ≤ ti ≤ 1000)时间,sli 为L时表示是旱路,S时表示是水路。可能有两条及以上路径连接两个镇子,并且路径都是双向的。

M + 2行的R是利腾需要去的镇子的数量,M + 3是利腾需要去的镇子的编号。

初始状态利腾和船都在第一个镇子,且肯定有方法达到需要去的镇子。

测试数据为0 0的时候表示终止。

Sample Input

3 3

1 2 5 L

1 2 7 S

2 3 11 S

3

1 2 3

5 5

1 2 15 L

2 3 10 L

4 5 7 L

1 3 30 S

3 4 100 S

5

1 3 5 4 1

0 0

Output for the Sample Input

18

269


解题新的:

  1. 这个题主要考察的是一个动态规划,其实Floyd就是一个动态规划,然后数据量有点大,时间给的很大,整个解题的过程也非常的暴力。
  2. 首先要明白水路和陆路是不能够只建立一张图的,水路需要建立一张图,陆路需要建立一张图,然后分别跑Floyd,得到同一种路中每两点之间的最短距离,然后动态规划,得到水路陆路混合跑的最短距离。

//cost[i][j]表示从i点走到j点需要花费的最少时间

#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll; const int maxn = 1010;
const ll INF = 0x1f1f1f1f1f1f1f1f;
ll odr[maxn],cost[maxn][maxn],sea_path[maxn][maxn],land_path[maxn][maxn],n,m,w; void init() {
memset(cost,INF, sizeof(cost));
memset(sea_path,INF, sizeof(sea_path));
memset(land_path,INF, sizeof(land_path));
char s[5];
for(int i=0;i<m;i++) {
ll a,b,c;
scanf("%lld%lld%lld%s",&a,&b,&c,s);
if(s[0] == 'S')//建立两个图
sea_path[a][b] = sea_path[b][a] = min(sea_path[a][b],c);
else
land_path[a][b] = land_path[b][a] = min(land_path[a][b],c);
} scanf("%lld",&w);
for(int i=1;i<=w;i++)
scanf("%lld",&odr[i]);//将要走的地点给存起来 } void Floyd() {//用Floyd来预处理任意两点之间的最短距离
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) {
sea_path[i][j] = min(sea_path[i][j],sea_path[i][k]+sea_path[k][j]);
land_path[i][j] = min(land_path[i][j],land_path[i][k]+land_path[k][j]);
}
} void get_ans() {
for(int i=1;i<=n;i++)
sea_path[i][i] = land_path[i][i] = 0;//自身到自身时间花费为0
cost[1][odr[1]] = 0;
for(int i=1;i<=w;i++) {
for(int j=1;j<=n;j++) {
cost[i][j] = min(cost[i][j],cost[i-1][j]+land_path[odr[i-1]][odr[i]]);//假如走的是陆路
for(int k=1;k<=n;k++) {//枚举船停的位置
cost[i][k] = min(cost[i][k],cost[i-1][j]+land_path[odr[i-1]][j]+sea_path[j][k]+land_path[k][odr[i]]);//从i-1点回到船在的j点,然后开船到k,再从陆路k到i点
}
}
}
ll Min = 1e12;
for(int i=1;i<=n;i++)
Min = min(cost[w][i],Min);
printf("%lld\n",Min);
} int main() {
while(scanf("%lld%lld",&n,&m) && n+m) {
init();
Floyd();
get_ans();
}
return 0;
}

Aizu:2200-Mr. Rito Post Office的更多相关文章

  1. AOJ 2200 Mr. Rito Post Office

    Mr. Rito Post Office Time Limit : 8 sec, Memory Limit : 65536 KB Problem D: Mr. Rito Post Office あなた ...

  2. Aizu - 2200 Mr. Rito Post Office

    题意:/*你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛 ...

  3. AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)

    [题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2200 [题目大意] 一张图中有陆路和水路,水路必须要有船才能走,当船 ...

  4. AOJ 2200 Mr. Rito Post Office (floyd+DP)

    题意: 快递到了:你是某个岛国(ACM-ICPC Japan)上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处 ...

  5. Mr. Rito Post Office [Aizu-2200] [图论] [DP]

    题意:你是某个岛国(ACM-ICPC Japan )上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛上 ...

  6. Mr. Rito Post Office

    あなたは離島の郵便局に勤めるプログラマである.あなたの住んでいる地域は,複数の島々からなる.各島には一つ以上の港町がある.それらに加えて他の町や村があるかもしない.ある島から別の島に向かうためには船を ...

  7. 教你一招:解决安装或卸载office时 提示错误2503 2502 发生了内部错误

    问题重现: 解决办法:使用软件卸载工具 Uninstall Tool 3.5.1 中文破解版强制删除文件,非常暴力,完美解决. 解决过程一览: 工具下载地址: 软件卸载工具 Uninstall Too ...

  8. KMSpico软件下载:激活Windows系统和Office工具

    每次都为激活Windows系统 和 Microsoft Offilce 工具头疼,为此特意记录并分享一下激活工具. 上资源:https://pan.baidu.com/s/1kI5YpCO2aYl-r ...

  9. Aizu:0009- Prime Number

    Prime Number Time limit 1000 ms Memory limit 131072 kB Problem Description Write a program which rea ...

随机推荐

  1. Vue.js - Day2

    品牌管理案例 添加新品牌 删除品牌 根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 ​<tr v-for="item in ...

  2. extjs 6

    因为最近公司要写一个项目前台所以开始学习extjs前端框架,希望一起共勉. 那么我们的教程就从 Hello World 讲起. helloWorld.js   Ext.onReady(function ...

  3. CSS选择器备忘录

    CSS选择器备忘录 基本选择器 Selector Meaning Example 通用选择器 匹配任何元素 * 标签选择器 CSS1中称之为元素选择器,匹配为指定标签的所有元素 div 伪元素选择器 ...

  4. java:错误Error,异常Excepition

    java中throw异常后代码还会继续执行吗 今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(i ...

  5. MySQL的四种主要存储引擎

    在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? ...

  6. nbu备份虚拟机报错156状态4207

    VMware Backup getting snapshot error encountered (156)and status: 4207: Could not fetch snapshot met ...

  7. 20145238-荆玉茗 《Java程序设计》第4周学习总结

    20145238 <Java程序设计>第4周学习总结 教材学习内容总结第六章 继承与多态 6.1.1 ·继承基本上就是避免多个类间重复定义共同行为. 在游戏中会有很多程序代码重复的片段,这 ...

  8. Java连接mysql中遇到的一些问题及解决方法

    1.Java使用mysql-jdbc连接MySQL出现如下警告: Establishing SSL connection without server's identityverification i ...

  9. Mybatis中的DataSource配置

    dataSource 的类型可以配置成其内置类型之一,如 UNPOOLED,POOLED,JNDI. 1.如果将类型设置成 UNPOOLED,MyBatis 会为每一个数据库操作创建一个新的连接,并关 ...

  10. How good are detection proposals, really?

    How good are detection proposals, really? J. Hosang, R. Benenson, B. Schiele Oral at BMVC 2014 http: ...