Mr. Rito Post Office

  你是一个为远程邮局邮局工作的程序员。你住的地区由几个岛屿组成。每个岛屿都有一个或多个港口城镇。除此之外,还有其他城镇和村庄。为了从一个岛到另一个岛,你必须使用一艘船。陆地道路可用于绕过一个岛屿,但使用海路可能会更快。

随着近年来邮局的私有化,邮政派遣员工的人事安排在全国范围内进行,以减少开支。远程邮局的邮局也不例外,因此,只有托伊先生成为邮差。由于邮局负责收集和交付的区域非常广泛,因此由一个人收集和分发是一项艰巨的工作。所以,Toi先生问你如何有效地做到这一点。

你的工作是编写一个程序,当Tobi先生获得城镇和村庄的接送订单时,可以找到最短路径。

Toi先生将永远无法按规定的顺序进行收集和交付工作。但是,从一个城镇或村庄迁移到另一个城镇或村庄时,可以通过其他城镇和村庄。此外,Toji先生还有一艘船绕着岛屿转。

例如,考虑到A镇的选择和交付顺序,B镇,C村,任何城镇或村庄都可以从A镇到B镇。在这个时候,但它可能是通过村C,以保护集散顺序,进行集散去一次B镇后,必须进行再次集散访村C.另外,如果您从A镇乘船前往B镇,然后使用陆路从B镇前往C村,则您将离开B镇。因此,如果你想下一次使用大海,你需要返回B镇。

在某些情况下,有必要收集和分发到多个城镇和村庄。例如,可以给出A镇,B村,C镇,B村的收集订单。此时,如果您在没有从A镇的B村追踪的情况下前往C镇,则您不能在城镇C拣货并突然出货。这是因为第一个B村的接送并没有结束。即使集散走访了B村完成了镇C中的收集和交付后,并不意味着结束了收集和第一轮村B的交付

Toji先生在开始时在某个港口城市有一艘船。由于Toi先生是一名资深人士,您可以忽略除旅行时间之外的收集和交付工作所需的时间。此外,它是唯一的一次,直到在城镇或村庄结束的集散作业完成的问题,去邮局船返回到原来位置的时间可能不会考虑。

输入

输入由多个数据集组成。每个数据集的格式如下。

N M
x 1 y 1 t 1 sl 1
x 2 y 2 t 2 sl 2
...
xM y M t M slM
[R
z1 z2 ... zR
数据集中的所有输入项都是非负整数。该行中输入项目的分隔符是一个空格。

第一行指定陆地和海洋网络的大小。

N(2≤N≤200)是城镇或村庄的数量。每个城镇或村庄都分配一个从1到N的唯一编号。 M(1≤M≤10000)是陆地和海洋的总数。

第1 + M行的第二行是对陆地或海路的描述。 xi和yi(1≤xi,yi≤N)表示两端的城镇或村庄的数量。 ti(1≤ti≤1000)表示陆地或海路的行程时间。 sli是'L'或'S',L是陆路,S是海路。

可能有两个或更多直接连接两个城镇和村庄的陆路或海路。每条陆地或海路都是双向的,即它可以向任何方向移动。

M + 2线上的R(1≤R≤1000)表示Toji先生处理的收集目的地和递送目的地的数量。 M + 3行,收集和城镇和数字字(1≤滋≤N)的村庄的传送目的地设置r个在收集和传递顺序。

在最初的状态下,Toji先生和这艘船都位于港口城镇z1。从最初的状态,你总是可以以某种方式移动到你选择和交付的城镇和村庄。

输入的结尾由包含由空白分隔的两个零的单行表示。

产量

对于每个输入数据集,找出Toji先生在给定的取件订单中在城镇和村庄周围旅行所需的最短行程时间,并将其输出到一条线上。

示例输入

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

1 3 5 4 1
0 0
样本输入的输出

18
269

    题目方程很好推出来,f[i][j]表示现在处于第i个快递点而船在j点时的最小花费,预处理出来纯陆地最短路和纯水路最短路,由于游历的顺序固定所以第i个点直接向第i+1个转移即可。

    一直WA的原因,一是数组开小了,最多游历1000个点并不一定是200,可能一个点多次。。。还有我的floyd写错了。。循环变量反了。。最后inf设置的不合理貌似中间爆了,吃完饭重新写才A。

    

 #include<bits/stdc++.h>
using namespace std;
#define LL long long
LL f[][],e1[][],e2[][],inf;
int a[];
int main(){
int n,m,i,j,k,u,r,v;
char str[];
LL w;
while(cin>>n>>m){
if(n==&&m==) break;
memset(e1,0x1,sizeof(e1));
memset(e2,0x1,sizeof(e2));
memset(f,0x1,sizeof(f));
for(i=;i<=n;++i)e1[i][i]=e2[i][i]=;
inf=f[][];
while(m--)
{
scanf("%d%d%lld",&u,&v,&w);
scanf("%s",str);
if(str[]=='L'){
e1[u][v]=e1[v][u]=min(e1[u][v],w);
}
else{
e2[u][v]=e2[v][u]=min(e2[u][v],w);
}
}
for(k=;k<=n;++k){
for(i=;i<=n;++i){
for(j=;j<=n;++j){
e1[i][j]=min(e1[i][j],e1[i][k]+e1[k][j]);
e2[i][j]=min(e2[i][j],e2[i][k]+e2[k][j]);
}
}
}
scanf("%d",&r);
for(i=;i<=r;++i) scanf("%d",a+i);
for(i=;i<=n;++i) f[][i]=min(f[][i],
e2[a[]][i]+e1[i][a[]]); for(i=;i<r;++i){
for(j=;j<=n;++j){
if(f[i][j]!=inf){
f[i+][j]=min(f[i+][j],f[i][j]+e1[a[i]][a[i+]]);
for(k=;k<=n;++k){
f[i+][k]=min(f[i+][k],f[i][j]+e2[j][k]+e1[a[i]][j]+e1[k][a[i+]]);
}
}
}
} LL ans=inf;
for(i=;i<=n;++i)ans=min(ans,f[r][i]);
cout<<ans<<endl;
}
return ;
}

Aizu-2200-floyd+dp的更多相关文章

  1. UVA10269 Adventure of Super Mario(Floyd+DP)

    UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...

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

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

  3. luogu1850 [NOIp2016]换教室 (floyd+dp)

    首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解 ...

  4. UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)

    题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...

  5. ZOJ 1232 Adventure of Super Mario (Floyd + DP)

    题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...

  6. FZUOJ Problem 2200 cleaning DP

    Problem 2200 cleaning  Problem Description N个人围成一圈在讨论大扫除的事情,需要选出K个人.但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距 ...

  7. hdu2833 Floyd + dp

    题意:      给你一个无向图,给你两组起点和终点,问你这两组起点和终点的最短路上最多有多少个交点... 思路:      开一个数组dp[i][j]记录最短路上i,j之间的点有多少个,这个数组是根 ...

  8. Aizu - 2200 Mr. Rito Post Office

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

  9. FZU Problem 2200 cleaning dp

    Problem Description N个人围成一圈在讨论大扫除的事情,需要选出K个人.但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距离不能为2,他们想知道共有多少种方法. Inp ...

  10. codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)

    题目链接:http://codeforces.com/problemset/problem/1204/C 给定一组序列,P1,P2,P3...Pm,这是一组合法路径的序列,即任意的Pi和Pi+1之间有 ...

随机推荐

  1. 在idea中为函数自动生成注释(解决注释无法出现形参的情况)

    1 点击“File”-->“Settings”-->“Live Templates”打开如下对话框,点击右边绿色的加号,创建一个自定义的Template Group,如“Java” 2.选 ...

  2. Python绘图教程

    1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import mat ...

  3. rpyc

    import json import socket from thread import * from ansible_api import * from rpyc import Service fr ...

  4. Python小功能汇总

    1.没有文件夹就新建 适用以下3种情况. (1)文件夹适用 (2)相对路径适用 (3)绝对路径适用 # 判断输出文件夹是否存在.不存在就创建 # 1.output_dir为绝对路径 if os.pat ...

  5. Spring源码解析(四)Bean的实例化和依赖注入

    我们虽然获得了Bean的描述信息BeanDefinition,但是什么时候才会真正的实例化这些Bean呢.其实一共有两个触发点,但是最后实际上调用的是同一个方法. 第一个:在AbstractAppli ...

  6. 【开发者笔记】python

    题记: 最近做Python导入接口,用到xlrd包读取excel文件信息入库,获取合并单元格信息时遇到时而成功时而失败的情况,一开始用xls文件读取不了合并单元格信息,后来换用xlsx格式可以读取.但 ...

  7. js cookie的读写

    cookie是一小段信息,以键/值对的信息保存在计算机硬盘上的字符串, cookie存储容量大概在4kb,不同的浏览器厂家对cookie大小的限制有微微的差异:cookie主要的本质是“识别”,通过识 ...

  8. jmeter命令行运行与生成报告

    一.     使用命令行方式运行Jmeter 1.1 为什么 使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死. 所以正确的打开方式是在GUI模式下调 ...

  9. bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler

    P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 细节题.$O(n^{2})$的$bfs$可过. #include<iostream> ...

  10. 20145301《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145301<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode是什么? Shellcode是指能完成特殊任务的 ...