题目描述:输入的第一行有三个数,T,S,D,T表示一共有多少条线路,S表示起点的个数,D表示终点的个数,接下来就是输入T条路的信息了,要你判断从多个起点中任意一个到多个终点中的任意的一个的最短距离是多少。

解题报告:这题与其他的题目最大的不同就是这题的起点和终点都有多个,不然就可以用迪杰斯特拉来解了,但是虽然这题有多个起点和多个终点,我们可不可以把它转化成用迪杰斯特拉解决的问题的类型呢,即转化成单个起点的问题呢? 答案是可以的,我们完全可以假设一个虚拟的起点和一个虚拟的终点,即将原来的N个点的图再加两个,变成N+2 个点图,一个起点一个终点,我们可以令实际上的起点到虚拟的起点的距离是一个定值,同理,令所有的终点到虚拟的终点的距离也是一个定值,这样就可以轻松的转化成用单源的最短路问题了,用迪杰斯特拉即可解出。

 #include<cstdio>
#include<cstring>
#include<iostream>
const int MAX = 0xfffff,SIZE = +;
int T1,S,D,map[SIZE][SIZE],f,T[SIZE],visit[SIZE];
int main() {
int a,b,len,x,y;
while(scanf("%d%d%d",&T1,&S,&D)!=EOF) {
memset(map,0x3f,sizeof(map));
memset(T,0x3f,sizeof(T));
printf("%d\n",T[]);
f = ;
for(int i = ;i<=T1;++i) {
scanf("%d%d%d",&a,&b,&len);
f = std::max(a,f); //找到编号最大的点以确定范围
f = std::max(b,f);
map[a][b] = map[b][a] = std::min(len,map[a][b]);
//如果有多条路径,取权值最小的
}
for(int i = ;i<=S;++i) { //增加虚拟起点到草儿家附近的城市的距离
scanf("%d",&a);
map[][a] = map[a][] = ;
}
f++; //增加一个虚拟的终点
for(int i = ;i<=D;++i) { //增加虚拟起点到草儿想去的城市的距离
scanf("%d",&a);
map[f][a] = map[a][f] = ;
}
int s = ;
T[s] = ;
memset(visit,,sizeof(visit));
while() {
if(s == f)
break;
for(int i = ;i<=f;++i)
if(!visit[i]&&(T[i]>(T[s]+map[s][i])))
T[i] = T[s]+map[s][i];
visit[s] = ;
s = f+;
bool flag = ;
for(int i = ;i<=f;++i)
if(!visit[i]&&T[i]<T[s]) {
s = i;
flag = ;
}
if(flag)
break;
}
printf("%d\n",T[f]-);
}
return ;
}

HDU 2066 一个人的旅行 最短路问题的更多相关文章

  1. hdu 2066 一个人的旅行

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...

  2. hdu 2066 一个人的旅行(最短路问题)

    最短路································· 类似的问题还有好多不会!慢慢学吧!!!!. 进步,哪怕每天一点也行! (恋爱不是小事,确实小事的积累!(听着酷狗音乐台说的,很 ...

  3. hdu 2066 一个人的旅行 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题意分析:以草儿家为原点,给出城市间相互抵达的时间,给出草儿想去的城市,求最短时间.典型的单源最 ...

  4. HDU 2066 一个人的旅行 - from lanshui_Yang

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  5. HDU 2066 一个人的旅行(dijkstra水题+判重边)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目大意:输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有 ...

  6. hdu 2066 一个人的旅行 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目意思:给出T条路,和草儿家相邻的城市编号,以及草儿想去的地方的编号.问从草儿家到达草儿想去的 ...

  7. hdu - 2066 一个人的旅行(基础最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可. #inc ...

  8. HDU 2066 一个人的旅行(单源最短路SPFA)

    Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还 ...

  9. hdu 2066 一个人的旅行 最短路径

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. 从C简单程序的汇编代码入手,以理解计算机工作原理。

    贺邦  原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000#/info 知识准备 ...

  2. asp.net 网页拉伸 到300%不变形方法一

    网页拉伸到300%控件和表格不会出现太大变形 方法: 1.对主页面采用百分比宽度(Width="100%") 2.对于表格使用百分比宽度,包括表格宽度和表格中顶端td宽度 3.对t ...

  3. idea 使用教程

    最智能的IDE IDEA相对于eclipse来说最大的优点就是它比eclipse聪明.聪明到什么程度呢?我们先来看几个简单的例子. 智能提示重构代码 如果你写的代码过于复杂,或者有更好的方式来替代你写 ...

  4. JwtUtils 工具类

    /** * jwt工具类 */ public class JwtUtils { public static final String SUBJECT = "onehee"; *** ...

  5. robotframework运行时后台报错UnicodeDecodeError

    win10环境下报错: Traceback (most recent call last): File "C:\Python27\lib\site-packages\robotide\con ...

  6. java学习之switch 等值判断

    当匹配到相等的值时候 则进入case里面执行语句 当该语句有break时候 则退出匹配 当没有break时候 则继续往下匹配 直到遇到break才停止匹配

  7. 理解 Continuation

    理解 Continuation (2012-08-26 10:39:34)     终于,我也不能免俗地要来谈谈这几个 Schemer 的必谈话题(顺便山寨了一个标题). Scheme 是一门神奇的编 ...

  8. 【刷题】LOJ 6008 「网络流 24 题」餐巾计划

    题目描述 一个餐厅在相继的 \(n\) 天里,每天需用的餐巾数不尽相同.假设第 \(i\) 天需要 \(r_i\) 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 \(P\) 分:或者把旧餐巾送到快洗 ...

  9. 在Mac上快速Kill掉Tomcat

    最近IDEA总是会莫名其妙的挂掉,而挂掉之后通过IDEA开启的Tomcat却没有同步给关掉,等我再在IDEA里要启动的时候,就不行了.... 这时,就需要手动去kill掉tomcat,每次先 ps - ...

  10. 【codevs1297】硬币 完全背包

    题目大意:给定 N 种不同种类的硬币,每种硬币的重量范围在一个可变区间内,但是价值恒定,求给定一个重量 W,求有多少种面值不同的组合方式. 题解:如果硬币的重量恒定,那么就是一道裸的完全背包问题.因此 ...