博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2066一个人的旅行
阅读量:6092 次
发布时间:2019-06-20

本文共 1700 字,大约阅读时间需要 5 分钟。

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

#include 
#include
#include
using namespace std;#define MAX 1005#define INF 1<<30int 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
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 <

转载地址:http://tumwa.baihongyu.com/

你可能感兴趣的文章
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
Mysql利用binlog恢复数据
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
WPF 降低.net framework到4.0
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>