51nod 1459 迷宫游戏(dij)

题目链接:51nod 1459 迷宫游戏

dij裸题。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<queue>
 6 #define CLR(a,b) memset((a),(b),sizeof((a)))
 7 using namespace std;
 8 const int inf = 0x3f3f3f3f;
 9 const int N = 500;
10 int d[N], vis[N];
11 int a[N];//存每个房间的得分
12 int ans[N]; //记录所经过的点的权值和
13 int n, m, st, ed;
14 struct qnode{
15     int v, c;
16     qnode(int _v = 0,int _c = 0):v(_v),c(_c) {}
17     bool operator < (const qnode &r)const{
18         return r.c < c;
19     }
20 };
21 struct Edge{
22     int v, w;
23     Edge(int _v = 0, int _w = 0):v(_v),w(_w) {}
24 };
25 vector<Edge>E[N];
26 void addedge(int u, int v, int w){
27     E[u].push_back(Edge(v, w));
28 }
29 void dij(){
30     priority_queue<qnode>q;
31     for(int i = 0; i < n; ++i){
32         d[i] = inf;
33         vis[i] = 0;
34         ans[i] = 0;
35     }
36     d[st] = 0;
37     ans[st] = a[st];
38     q.push(qnode(st, 0));
39     while(!q.empty()){
40         qnode t = q.top(); q.pop();
41         int u = t.v;
42         if(vis[u])
43             continue;
44         vis[u] = 1;
45         for(int i = 0; i < E[u].size(); ++i){
46             int v = E[u][i].v;
47             int w = E[u][i].w;
48             if(!vis[v] && d[u] + w < d[v]){
49                 d[v] = d[u] + w;
50                 ans[v] = ans[u] + a[v];
51                 q.push(qnode(v, d[v]));
52             }
53             else if(!vis[v] && d[u] + w == d[v]){
54                 ans[v] = max(ans[v], ans[u] + a[v]);
55             }
56         }
57 
58     }
59 }
60 int main(){
61     int x, y, z;
62     scanf("%d%d%d%d", &n, &m, &st, &ed);
63     for(int i = 0; i < n; ++i)
64         scanf("%d", &a[i]);
65     while(m--){
66         scanf("%d%d%d", &x, &y, &z);
67         addedge(x, y, z);
68         addedge(y, x, z);
69     }
70     dij();
71     printf("%d %d\n", d[ed], ans[ed]);
72     return 0;
73 }
View Code

 

posted @ 2016-10-21 20:42  GraceSkyer  阅读(373)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……