FOJ Problem 2261 浪里个浪
Accept: 40 Submit: 106
Time Limit: 1500 mSec Memory Limit : 32768
KB
Problem Description
TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划。
现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道。他已经预先规划好了一些点作为旅游的起点和终点,他想选择其中一个起点和一个终点,并找出从起点到终点的一条路线亲身体验浪的过程。但是他时间有限,所以想选择耗时最小的,你能告诉他最小的耗时是多少吗?
Input
包含多组测试数据。
输入第一行包括两个整数n和m,表示有n个地点,m条可行路径。点的编号为1 - n。
接下来m行每行包括三个整数i, j, cost,表示从地点i到地点j需要耗时cost。
接下来一行第一个数为S,表示可能的起点数,之后S个数,表示可能的起点。
接下来一行第一个数为E,表示可能的终点数,之后E个数,表示可能的终点。
0<S, E≤n≤100000,0<m≤100000,0<cost≤100。
Output
输出他需要的最短耗时。
Sample Input
1 3 1
1 4 2
2 3 3
2 4 4
2 1 2
2 3 4
Sample Output
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f struct Edge {
int from, to, dist;
Edge(int u = , int v = , int w = ) :from(u), to(v), dist(w) {}
}; struct HeapNode {
int dist, u; //顶点u距离s的距离为dist
HeapNode(int w = , int x = ) :dist(w), u(x) {}
bool operator<(const HeapNode&rhs)const {
return dist>rhs.dist;
}
}; struct Graph {
const static int V = 1e5 + +;
int n, m;
vector<Edge>edges; // 边集
vector<int>G[V];
bool done[V]; //是否已经永久标号
int d[V]; //s到各个顶点的距离 void init(int n) {
this->n = n;
for (int i = ; i<n; i++)G[i].clear();
edges.clear();
} void addEdge(int from, int to, int dist) {
edges.push_back(Edge(from, to, dist));
m = edges.size();
G[from].push_back(m - );
} void dijkstra(const vector<int>&s) {
memset(d, 0x3f, sizeof(d));
memset(done, , sizeof(done));
priority_queue<HeapNode>Q;
int ns = s.size();
for (int i = ; i<ns; i++) {
d[s[i]] = ;
Q.push(HeapNode(, s[i]));
} while (!Q.empty()) {
HeapNode x = Q.top(); Q.pop();
int u = x.u; // 拿最小距离的顶点编号
if (done[u])continue; //每个顶点出发只可以松弛一次
done[u] = true;
for (int i = ; i<G[u].size(); i++) {
Edge&e = edges[G[u][i]]; //取出一条邻边
if (d[e.to]>d[u] + e.dist) {
d[e.to] = d[u] + e.dist;
Q.push(HeapNode(d[e.to], e.to));
}
}
}
} int slove(const vector<int>&s, const vector<int>&t) {
dijkstra(s);
int res = inf, nt = t.size();
for (int i = ; i<nt; i++) {
res = min(res, d[t[i]]);
}
return res;
} }slover;
vector<int>s, t;
int main() {
//源点0,汇点n+1
//freopen("in.txt","r",stdin);
int n, m, u, v, w, S, E;
while (scanf("%d %d", &n, &m) == ) {
slover.init(n + );
s.clear(), t.clear();
for (int i = ; i<m; i++) {
scanf("%d %d %d", &u, &v, &w);
slover.addEdge(u, v, w);
}
s.push_back();
scanf("%d", &S);
for (int i = ; i < S; i++) {
int a;
scanf("%d",&a);
slover.addEdge(,a,);
}
scanf("%d", &E);
t.resize(E);
for (int i = ; i < E; i++) {
scanf("%d", &t[i]);
}
printf("%d\n", slover.slove(s, t));
};
return ;
}
FOJ Problem 2261 浪里个浪的更多相关文章
- 浪里个浪 FZU - 2261
TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...
- 【fzu-2261】浪里个浪
TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...
- [FZU2261]浪里个浪
TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...
- FOJ Problem 1016 无归之室
Problem 1016 无归之室 Accept: 926 Submit: 7502Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- FOJ ——Problem 1759 Super A^B mod C
Problem 1759 Super A^B mod C Accept: 1368 Submit: 4639Time Limit: 1000 mSec Memory Limit : 32 ...
- FOJ Problem 2257 Saya的小熊饼干
...
- 尖端之作看逐浪-Zoomla!逐浪CMS python版发布
免费下载:https://www.z01.com/down/3723.shtml Python是跻身于当代IT世界最流行和代码最高效的编程语言之一. 带着对技术的卓越追求.对客户的承诺.对品质的极致追 ...
- FOJ Problem 1015 土地划分
Problem 1015 土地划分 Accept: 823 Submit: 1956Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- foj Problem 2107 Hua Rong Dao
Problem 2107 Hua Rong Dao Accept: 503 Submit: 1054Time Limit: 1000 mSec Memory Limit : 32768 K ...
随机推荐
- iframe的document操作
导语: 在我写网页代填插件的时候,有遇到拿不到input元素的时候,这时候我去看元素布局,发现有些网站登录那一块是用iframe标签写的,这时候我需要取到的那就是iframe标签下input元素 1. ...
- GitHub和码云的简单使用
年轻,又经历了初高大学的英语的纠缠,导致连最简单的语句都看不懂,我在慢慢寻找语言的快乐 GitHub 的简单使用 : https://www.cnblogs.com/zhcncn/p/3731707. ...
- nodejs个人博客系统
说明:本人目前还是一名C#程程序,在公司干过一年的前端(ps切图,html+css,js),二年的后台C#(b/s,c/s)的开发.因为想转型所以学习了nodejs这门感觉非常棒的一门语言.于是写了一 ...
- 01_11_Strtus2简单数据验证
01_11_Strtus2简单数据验证 1. 引入struts标签 <%@taglib uri="/struts-tags" prefix="s" %&g ...
- cron job 里面,如何让脚本半分钟运行一次?
cron job 里面,如何让脚本半分钟运行一次? cron本身实现不了.但可以借助于sleep命令实现. 解决方法: 两个脚本 一个正常,一个增加sleep 30 crontab设置同时启动 在有的 ...
- PAT 乙级 1077
题目 题目地址:PAT 乙级 1077 题解 本题没什么难度,但是要注意细节问题,下面简单来说一下: vector 把输入的学生打分存起来,直接用算法库中的 sort 函数给它们排个序,之后直接剔除首 ...
- POJ-1426-Find the multiply
这题深搜广搜都可以做,深搜的做法就是把每个由1 和 0 组成的数字拓展10倍以及拓展10倍+1,然后压入队列. 这样可以走过所有由10组成的数字,且两个方向平行发展(*10 +0和+1). bfs ...
- 通过composer安装阿里大于接口扩展
# 安装laravel阿里大鱼服务 composer require iscms/alisms-for-laravel laravel配置 # 注册服务 # 在config\app.php文件中找到P ...
- thinkphp5开发restful-api接口 学习笔记一
视频学习地址: http://study.163.com/course/courseMain.htm?courseId=1004171002 源码和文档(如果满意,欢迎 star): https:// ...
- Python基础——模块与包
在Python中,可以用import导入需要的模块.包.库.文件等. 把工作路径导入系统路径 import os#os是工作台 import sys#sys是系统 sys.path.append(os ...