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

4 4
1 3 1
1 4 2
2 3 3
2 4 4
2 1 2
2 3 4

Sample Output

思路:最短路裸模板题。
AC代码:

#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 浪里个浪的更多相关文章

  1. 浪里个浪 FZU - 2261

    TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...

  2. 【fzu-2261】浪里个浪

    TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...

  3. [FZU2261]浪里个浪

    TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划. 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道.他已经预先 ...

  4. FOJ Problem 1016 无归之室

     Problem 1016 无归之室 Accept: 926    Submit: 7502Time Limit: 1000 mSec    Memory Limit : 32768 KB  Prob ...

  5. 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 ...

  6. FOJ Problem 2257 Saya的小熊饼干

                                                                                                        ...

  7. 尖端之作看逐浪-Zoomla!逐浪CMS python版发布

    免费下载:https://www.z01.com/down/3723.shtml Python是跻身于当代IT世界最流行和代码最高效的编程语言之一. 带着对技术的卓越追求.对客户的承诺.对品质的极致追 ...

  8. FOJ Problem 1015 土地划分

    Problem 1015 土地划分 Accept: 823    Submit: 1956Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  9. foj Problem 2107 Hua Rong Dao

    Problem 2107 Hua Rong Dao Accept: 503    Submit: 1054Time Limit: 1000 mSec    Memory Limit : 32768 K ...

随机推荐

  1. VS Code:设置多行注释快捷键

    多行注释,也叫块注释. 如何查看,并修改VS Code中的多行注释快捷键呢? 1). 点击 首选项 - 键盘快捷方式 2). 在搜索框中输入 comment 3). 这个时候可以看到“切换块注释”的信 ...

  2. 课下作业04-2String的使用方法

    1.动手动脑之String.equals()方法public class StringEquals { public static void main(String[] args) { String ...

  3. debian常用指令

    查看软件xxx安装内容 dpkg -L xxx 查找软件 apt-cache search 正则表达式 查找文件属于哪个包 dpkg -S filename apt-file search filen ...

  4. UICollectionView实现无限轮播

    #import "KGNewsController.h"#import "KGNewsCell.h"#import "KGNews.h"#i ...

  5. NOIP2018

    非常糟糕.从未意识到过考场debuff这么严重. 果不其然,高档选手强如txc实力AK:而像我这样的中档选手就是重在考场发挥和自我调整了吧. 究竟要付出多少代价才能领会一个教训 看来要尝试更自闭一点

  6. Jquery之 Ajax /json

    前言: Ajax = Asynchronous JavaScript and XML(异步的JavaScript和XML) Ajax不是新的编程语言,而是一种使用现有标准的新方法. Ajax最大的优点 ...

  7. Voyager的数据库操作与Bread Builder,解决国内打开网速超级慢的问题

    Products表的创建: Bread Builder 伟大的XX封了谷哥,所以有关网站实在是打不开,正准备放弃的时候,突然发现问题了,对就是这个网站ajax.googleapis.com,由于调用的 ...

  8. OverflowError:django signed integer is greater than maximum

    在学习一对一查询的时候,打印作者的电话时报了这个错 alex = Author.objects.filter(name='alex').first() print(alex.authordetail. ...

  9. linux学习-主机的细部权限规划:ACL 的使用

    传统的权限仅有三种身份 (owner, group, others) 搭配三种权限 (r,w,x) 而已,并没有办法单纯的针对某一个使用者或某一个群 组来设定特定的权限需求,此时就得要使用 ACL 这 ...

  10. jsp页面上传多个name值到后台

    平常利用表单提交的一般都是一个文本框对应一个name,而在后台都是利用request.getParameter(String name);这段代码返回的是一个String类型的参数:而当我们页面上有多 ...