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 ...
随机推荐
- python 函数内使用全局变量
x = def change_global(): global x x = x + change_global() print(x) result: 2
- Ab initio methods|Evidence-based methods|maximum-likelihood|branch-site|H1|H0|GO|dS/dN ratio
(Gene prediction and comparison) 使用基于基因组序列的从头预测方法(Ab initio methods)(同时分别使用头预测软件( GENSCAN和 AUGUSTUS) ...
- Java动画 重力弹球 如鹏游戏引擎 精灵 设计一个小球加速落地又减速弹起并反复直到停止的Java程序
package com.swift; import com.rupeng.game.GameCore; public class BouncingBall implements Runnable { ...
- knn算法之预测数字
训练算法并对算法的准确值准确率进行估计 #导入相应模块 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%mat ...
- Voyager下的Media Manager文件管理与Menu Builder
Media Manager 默认存储位置在storage/app/public 上传文件,新建文件夹,移动,重命名,删除等等等功能 Menu Builder 创建新的Main菜单 创建一个shop菜单 ...
- ubuntu中卸载没有安装完全的软件包
sudo apt-get autoclean sudo apt-get clean sudo apt-get autoremove
- yagmail 邮箱的使用
文章来源:GITHub:https://github.com/kootenpv/yagmail 安装 pip3 install yagmail pip3 install keyring 简单例子 im ...
- init_bootmem_node
初始化pg_data_t->bdtat结构体, /* * node_bootmem_map is a map pointer - the bits represent all physical ...
- debian 升级glibc
原因 wheezy是2.13,编译android4.4 需要2.14的,报错如下: rebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8-linar ...
- 利用PowerDesigner逆向工程导出PDM模型及生成文档
原文:利用PowerDesigner逆向工程导出PDM模型及生成文档 最近需要对老项目进行重构优化,由于项目都是好几年前的,相关设计资料很不全,最基本的数据库设计文档都没有,只能利用PowerDesi ...