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. python 函数内使用全局变量

    x = def change_global(): global x x = x + change_global() print(x) result: 2

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

  3. Java动画 重力弹球 如鹏游戏引擎 精灵 设计一个小球加速落地又减速弹起并反复直到停止的Java程序

    package com.swift; import com.rupeng.game.GameCore; public class BouncingBall implements Runnable { ...

  4. knn算法之预测数字

    训练算法并对算法的准确值准确率进行估计 #导入相应模块 import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%mat ...

  5. Voyager下的Media Manager文件管理与Menu Builder

    Media Manager 默认存储位置在storage/app/public 上传文件,新建文件夹,移动,重命名,删除等等等功能 Menu Builder 创建新的Main菜单 创建一个shop菜单 ...

  6. ubuntu中卸载没有安装完全的软件包

    sudo apt-get autoclean sudo apt-get clean sudo apt-get autoremove

  7. yagmail 邮箱的使用

    文章来源:GITHub:https://github.com/kootenpv/yagmail 安装 pip3 install yagmail pip3 install keyring 简单例子 im ...

  8. init_bootmem_node

    初始化pg_data_t->bdtat结构体, /* * node_bootmem_map is a map pointer - the bits represent all physical ...

  9. debian 升级glibc

    原因 wheezy是2.13,编译android4.4 需要2.14的,报错如下: rebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8-linar ...

  10. 利用PowerDesigner逆向工程导出PDM模型及生成文档

    原文:利用PowerDesigner逆向工程导出PDM模型及生成文档 最近需要对老项目进行重构优化,由于项目都是好几年前的,相关设计资料很不全,最基本的数据库设计文档都没有,只能利用PowerDesi ...