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 ...
随机推荐
- Unity调用Windows窗口句柄,选择文件和目录
T:2019-6-25 10:06:59 C:Scatt Kang using System; using System.Collections; using System.Collections.G ...
- mybatis枚举类型处理器
1. 定义枚举值的接口 public abstract interface ValuedEnum { int getValue(); } 所有要被mybatis处理的枚举类继承该接口 2. 定义枚举类 ...
- drf版本控制 django缓存
drf的版本控制 内置的版本控制类 from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersion ...
- jquery中arrt()和prop()的区别
在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同. 但不得不说的是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. ...
- HDU - 4027 Can you answer these queries?(线段树)
给定一个长度为n的序列,m次操作. 每次操作 可以将一个区间内的所有数字变为它的根号. 可以查询一个区间内所有元素的和. 线段树的初级应用. 如果把一个区间内的元素都改为它的根号的话,是需要每个数字都 ...
- 如何用好 Google 等搜索引擎?
看见知乎上如何用好Google搜索的问题(http://www.zhihu.com/question/20161362),整理一下.感谢知乎大神 1.Choose Which Google? HTTP ...
- RQNOJ:PID30 / [stupid]愚蠢的矿工☆(树形背包)
PID30 / [stupid]愚蠢的矿工☆ 背景 Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再 ...
- LoadRunner 11破解方法
名称:HP Loadrunner Software 11.00 版本号:11.00.0.0 安装环境:Win 7 软件安装成功后,会弹出提示告知license的有效期为10天. 破解方法: 1.下载破 ...
- ogre3d环境配置与简单程序示例
SDK安装以及编译 1.下载SDK,地址如下 http://www.ogre3d.org/download/sdk 2.安装SDK,直接解压到相应目录,如D:/ogreSDK 3.我用的是1.8版本, ...
- web自动化之selenium
一.Selenium(http://www.selenium.org/) Web自动化测试工具.它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器,如果你在这些浏览器里 ...