hdu2066一个人的旅行
枚举全部相邻城市,作为起点,多次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一个人的旅行的更多相关文章
- hdu2066一个人的旅行(dijkstra)
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- HDU2066一个人的旅行/最短路问题
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU2066 一个人的旅行 最短路基础
新手熟悉一下迪杰斯特拉... 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu2066一个人的旅行(floyd优化)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU2066一个人的旅行---(多起点多终点最短路径)
http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memo ...
- hdu2066一个人的旅行(disjkstra)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu-2066 一个人的旅行(最短路spfa)
题目链接: 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
- hdu2066一个人的旅行(多源点多汇点的最短路径问题)
/* 思路:多源点,多会点的最短路径! 将最小号-1的节点但最源点,将最大号+1的点当作汇点! 将问题转变成从一个源点到一个汇点的最短路径的问题! 开始忘记初始化vector了,哇了好多次....坑爹 ...
- HDU2066一个人的旅行(dijkstra)
一开始拿到这个题感觉floyd可能会超,还是写了写,果然1WA+1TLE,之后觉得用dijkstra试试看看S和D会不会比较小,还是1WA+1TLE,最后还是借鉴了别人的做法. 把他的家作为起点,与他 ...
随机推荐
- Integral Promotions整数提升和符号扩展(char,unsigned char,signed char)
以下来自msdn: Objects of an integral type can be converted to another wider integral type (that is, a ty ...
- MFC + CxImage 实现自绘半透明按钮
环境:VS2008 + CxImage btn.h [cpp] view plaincopyprint? #pragma once // CBtn #include "ximage/xima ...
- 用 PS 复制权限
用 PS 复制权限 我们要把源计算机上的文件权限复制到目的计算机上. get-acl .\s.txt | Export-Clixml sddl.xml 把 s.txt 文件的权限保存到 sddl.xm ...
- Win32 Windows编程 十二
一.对话框 1.对话框的分类 2.对话框的基本使用方式 3.对话框资源 4.有模式对话框的使用 5. 无模式对话框的使用 5.1 加入对话框资源 5.2 定义窗体处理函数 BOOL CALLBACK ...
- FastDFS的学习与使用(大量帖子)
http://www.oschina.net/p/fastdfs http://bbs.chinaunix.net/forum-240-1.html
- 如何捕获winform程序全局异常?
1.在C#中我们如何处理异常? 上面的问题学过C#的问题大家可能都能回答处理,用try-catch-finally具体如下: try { //可能出错的语句 } catch (Exception) { ...
- cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动
上篇显示了控制手柄,但是还不能用来控制坦克, 这篇将会讲手柄和坦克的移动结合起来. 1.先在CityScene场景中实现场景的虚函数virtual void onEnter(); onEnter在进入 ...
- Android 系统api实现定位及使用百度提供的api来实现定位
目前在国内使用定位的方法主要是 1. Android系统提供的 LocationManager locationManager = (LocationManager) getSystemService ...
- Windows窗体透明效果
虚拟机里的win7也想实现透明效果, 使用vitrite这个免费软件就可以了.
- 基于W5500+Yeelink的远程灯光控制设计
概述 工具:物联网云平台Yeelink DHT11温湿度传感器 W5500EVB 编译环境:Keil4 目的:通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯.通过W ...