枚举全部相邻城市,作为起点,多次spfa,然后每次在想去的城市中找出spfa后的距离起点最短的花费时间

#include <iostream>
#include <cstring>
#include <queue> using namespace std; #define MAX 1005
#define INF 1<<30 int T,S,D; struct Edge{
int to,time,next;
}edge[MAX*2];
int head[MAX],tol; int s_city[MAX],d_city[MAX]; void add(int u,int v,int time)
{
edge[tol].to = v;
edge[tol].time = time;
edge[tol].next = head[u];
head[u] = tol ++;
} int dis[MAX];
bool flag[MAX]; int spfa(int src)
{
for(int i = 0; i < MAX; i ++) dis[i] = INF;
memset(flag,false,sizeof(flag));
flag[src] = true;
dis[src] = 0; queue<int>q;
q.push(src); while(!q.empty())
{
int u = q.front(); q.pop();
flag[u] = false; for(int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].to,time = edge[i].time;
if(dis[u] + time < dis[v])
{
dis[v] = dis[u]+time;
if(!flag[v]){
q.push(v); flag[v] = true;
}
}
}
} int ans = INF;
for(int i = 0; i < D; i ++)
{
if(dis[d_city[i]] < ans) ans = dis[d_city[i]];
}
return ans;
} int main()
{
int a,b,time;
while(cin >> T >> S >> D)
{
memset(head,-1,sizeof(head));
tol = 0; while(T--){
cin >> a >> b >> time;
add(a,b,time); add(b,a,time);
}
for(int i = 0; i < S; i ++) cin >> s_city[i];
for(int i = 0; i < D; i ++) cin >> d_city[i]; //ans 无穷大。对于每个相邻城市作为源点spfa,而且返回到D个想去的城市中的最小时间
int ans = INF;
for(int i = 0; i < S; i ++)
{
int temp = spfa(s_city[i]);
if(temp < ans) ans = temp;
}
cout << ans <<endl;
}
return 0;
}

hdu2066一个人的旅行的更多相关文章

  1. hdu2066一个人的旅行(dijkstra)

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

  2. HDU2066一个人的旅行/最短路问题

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

  3. HDU2066 一个人的旅行 最短路基础

    新手熟悉一下迪杰斯特拉... 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. hdu2066一个人的旅行(floyd优化)

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

  5. HDU2066一个人的旅行---(多起点多终点最短路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memo ...

  6. hdu2066一个人的旅行(disjkstra)

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

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

    题目链接: 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Pr ...

  8. hdu2066一个人的旅行(多源点多汇点的最短路径问题)

    /* 思路:多源点,多会点的最短路径! 将最小号-1的节点但最源点,将最大号+1的点当作汇点! 将问题转变成从一个源点到一个汇点的最短路径的问题! 开始忘记初始化vector了,哇了好多次....坑爹 ...

  9. HDU2066一个人的旅行(dijkstra)

    一开始拿到这个题感觉floyd可能会超,还是写了写,果然1WA+1TLE,之后觉得用dijkstra试试看看S和D会不会比较小,还是1WA+1TLE,最后还是借鉴了别人的做法. 把他的家作为起点,与他 ...

随机推荐

  1. mac下的应用程序发布 及 打包(Python写的脚本,可打包第三方库)

    其实这个问题在网上能搜到大把的解决方案.大家的统一答案都是 otool -L yourapp.app/Contents/MacOS/yourapp 根据输出信息在运行 install_name_too ...

  2. 利用java concurrent 包实现日志写数据库的并发处理

    一.概述 在很多系统中,往往需要将各种操作写入数据库(比如客户端发起的操作). 最简单的做法是,封装一个公共的写日志的api,各个操作中调用该api完成自己操作日志的入库.但因为入数据库效率比较低,如 ...

  3. Matlab中.*和./详解

    1.概念 .*和./用于矩阵相乘或者矩阵相除,分别表示矩阵中对应元素相乘和对应元素相除. 2.实例:

  4. 只启动一个zookeeper配置 server1只需要配置一个

    [root@wx03 conf]# cat zoo.cfg # The number of milliseconds of each tick tickTime=2000 # The number o ...

  5. mysql 行锁排查

    <pre name="code" class="html">mysql 锁表: 隔离级别使用RR: mysql> SELECT @@GLOBA ...

  6. AdapterView&lt;?&gt; arg0, View arg1, int arg2, long arg3參数含义

    arg0:是指父Vjew arg1就是你点击的那个Item的View arg2是position,position是你适配器里面的position arg3是id,通常是第几个项.id是哪个项View ...

  7. PCI-X总线

    PCI-X接口是并连的PCI总线(Peripheral Components Interconnect)的更新版本号,仍採用传统的总线技术,只是有很多其它数量的接线针脚, 同一时候,如前所述的全部的连 ...

  8. linux网络体系架构

    原创kylin_zeng:http://blog.csdn.net/kylin_fire_zeng  本文参考国嵌视频教程,再此感谢国嵌教育. 一.协议栈层次对比: 1)网络接口层把数据链路层和物理层 ...

  9. 微信或手机浏览器在线显示office文件(已測试ios、android)

    近期开发微信企业号,发现微信andriod版内置浏览器在打开文件方面有问题,可是ios版没有问题.原因是ios版使用的是safari浏览器 支持文档直接打开.可是andriod版使用的是腾讯浏览器x5 ...

  10. 你真的知道为什么不推荐使用@import?

    Difference between @import and link in CSS Use of @import <style type="text/css">@im ...