HDU 2066 一个人的旅行 最短路问题

来源:互联网 发布:悉知还是知悉 编辑:程序博客网 时间:2024/06/05 15:40

这题写坑了。。居然写了一个点。。

不久是裸的SPFA么,居然敲屎了!

啥也不说了,贴代码!(AC 15MS)

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int INF = 0x7f7f7f;const int MAX = 1020;int start[MAX], dis[MAX];int que[MAX], tail, front, now, size;bool to[MAX];struct way{    int to, time;}tp;vector<way> adjmap[MAX];int bfs(int s){    tail = 0, front = 1;    for(int i = 0; i < MAX; ++i)        dis[i] = INF;    que[0] = s, dis[s] = 0;    while(tail < front){        now = que[tail++];        size = adjmap[now].size();        for(int i = 0; i < size; ++i){            tp = adjmap[now][i];            if(dis[tp.to] > dis[now] + tp.time){                dis[tp.to] = dis[now] + tp.time;                que[front++] = tp.to;            }        }    }    int ans = INF;    for(int i = 0; i < MAX; i++)        if(to[i])            ans = min(dis[i], ans);    return ans;}int main(){    int t, s, d, a, b, time, temp;    while(~scanf("%d%d%d", &t, &s, &d)){        int ans = INF;        memset(to, false, sizeof(to));        for(int i = 0; i < MAX; ++i)            adjmap[i].clear();        while(t--){            scanf("%d%d%d", &a, &b, &time);            adjmap[a].push_back((way){b, time});            adjmap[b].push_back((way){a, time});        }        for(int i = 0; i < s; ++i)            scanf("%d", start + i);        for(int i = 0; i < d; ++i){            scanf("%d", &temp);            to[temp] = true;        }        for(int i = 0; i < s; ++i)            ans = min(ans, bfs(start[i]));        printf("%d\n", ans);    }}


原创粉丝点击