zoukankan      html  css  js  c++  java
  • HDU 2066 一个人的旅行

    一个人的旅行

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 27564    Accepted Submission(s): 9564


    Problem Description
    虽 然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去 阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个 假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火 车(好可怜啊~)。
     
    Input
    输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
    接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
    接着的第T+1行有S个数,表示和草儿家相连的城市;
    接着的第T+2行有D个数,表示草儿想去地方。
     
    Output
    输出草儿能去某个喜欢的城市的最短时间。
     
    Sample Input
    6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
     
    Sample Output
    9
     
    Author
    Grass
     
    Source
     
    Recommend
    lcy
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <vector>
     4 #include <queue>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 const int maxn = 1050;
     9 const int INF = 0x7ffffff;
    10 
    11 struct Edge {
    12     int from, to, dist;
    13     Edge(int u, int v, int d) :from(u), to(v), dist(d) {}
    14 };
    15 
    16 struct HeapNode {
    17     int d, u;
    18     HeapNode(int dv, int uv) :d(dv), u(uv){}
    19     bool operator < (const HeapNode& rhs) const {
    20         return d > rhs.d;
    21     }
    22 };
    23 struct Dijkstra {
    24     int n, m;
    25     Dijkstra(){};
    26     Dijkstra(int nv, int mv) :n(nv), m(mv){}
    27     vector<Edge> edges;
    28     vector<int> G[maxn];
    29     bool done[maxn]; //是否已永久标号
    30     int d[maxn]; //s到各个点的距离
    31     //int p[maxn]; //最短路中的上一条弧
    32     void init(int n) {
    33         this->n = n;
    34         for (int i = 0; i < n; i++) G[i].clear();
    35         edges.clear();
    36     }
    37     void AddEdge(Edge e) {
    38         edges.push_back(e);
    39         m = edges.size();
    40         G[e.from].push_back(m - 1);
    41     }
    42     void dijkstra(int s) {
    43         priority_queue<HeapNode> Q;
    44         for (int i = 0; i < n; i++) d[i] = INF;
    45         d[s] = 0;
    46         memset(done, 0, sizeof(done));
    47         Q.push(HeapNode(0, s));
    48         while (!Q.empty()) {
    49             HeapNode x = Q.top(); Q.pop();
    50             int u = x.u;
    51             if (done[u]) continue;
    52             done[u] = true;
    53             for (int i = 0; i < G[u].size(); i++) {
    54                 Edge& e = edges[G[u][i]];
    55                 if (d[e.to] > d[u] + e.dist) {
    56                     d[e.to] = d[u] + e.dist;
    57                     //p[e.to] = G[u][i];
    58                     Q.push(HeapNode(d[e.to],e.to));
    59                 }
    60             }
    61         }
    62     }
    63 };
    64 
    65 int ad[maxn];
    66 int wt[maxn];
    67 int main()
    68 {
    69     int T,S,D,t, a, b, r,ans,temp;
    70     Dijkstra d;
    71     while (scanf("%d%d%d", &T, &S, &D) == 3)
    72     {
    73         ans = INF;
    74         d.init(1005);
    75         for(int i=0;i<T;i++)
    76         {
    77             scanf("%d%d%d",&a,&b,&t);
    78             d.AddEdge(Edge(a-1,b-1,t));
    79             d.AddEdge(Edge(b-1,a-1,t));
    80         }
    81         for(int i=0;i<S;i++) scanf("%d",&ad[i]);
    82         for(int i=0;i<D;i++) scanf("%d",&wt[i]);
    83         for(int i=0;i<S;i++)
    84         {
    85             d.dijkstra(ad[i]-1);
    86             for(int j=0;j<D;j++)
    87             {
    88                 if(ans>d.d[wt[j]-1]) ans=d.d[wt[j]-1];
    89             }
    90         }
    91         printf("%d
    ",ans);
    92     }
    93 }
  • 相关阅读:
    python txt文件数据转excel
    数字的可视化:python画图之散点图sactter函数详解
    Python使用matplotlib模块绘制多条折线图、散点图
    python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence
    Python Requests post并将得到结果转换为json
    Python按行读取文件、写文件
    重装系统后,指纹识别无法使用
    MySQL的简单使用和JDBC示例
    resin后台输出中文乱码的解决办法!
    MySQL时间增加、字符串拼接
  • 原文地址:https://www.cnblogs.com/cumulonimbus/p/5185078.html
Copyright © 2011-2022 走看看