P1339 [USACO09OCT]热浪Heat Wave

题面

昂昂昂

有负权,所以果断spfa,再改一些些细枝末节的东西,新鲜的代码就出炉了,两面煎至金黄,隔壁家的小孩都馋哭了~~~

 1 #include<set>
 2 #include<map>
 3 #include<list>
 4 #include<queue>
 5 #include<stack>
 6 #include<string>
 7 #include<cmath>
 8 #include<ctime>
 9 #include<vector>
10 #include<bitset>
11 #include<memory>
12 #include<utility>
13 #include<cstdio>
14 #include<sstream>
15 #include<iostream>
16 #include<cstdlib>
17 #include<cstring>
18 #include<algorithm>
19 using namespace std;
20 
21 int n,m,z,y,a,b,c;
22 queue<int> q;//堆优化
23 int d[10001];
24 bool inque[10001];
25 struct node{
26     int t,dist;
27 };
28 vector<node> g[10000];
29 
30 bool spfa(int s){//spfa板子
31     memset(d,0x3f,sizeof(d));
32     memset(inque,0,sizeof(inque));
33     d[s]=0;
34     q.push(s);
35     inque[s]=true;
36     while(!q.empty()){
37         int u=q.front();
38         q.pop();
39         inque[u]=false;
40         for(int i=0;i<g[u].size();i++){
41             int v=g[u][i].t;
42             int w=g[u][i].dist;
43             if(d[u]+w<d[v]){
44                 d[v]=d[u]+w;
45                 if(inque[v]==false){
46                     q.push(v);
47                     inque[v]=true;
48                 }
49             }
50         }
51     }
52 }
53 
54 int main(){
55     scanf("%d%d%d%d",&n,&m,&z,&y);
56     for(int i=1;i<=m;i++){
57         scanf("%d%d%d",&a,&b,&c);
58         g[a].push_back((node){b,c});//两遍
59         g[b].push_back((node){a,c});
60     }
61     spfa(z);
62     printf("%d\n",d[y]);
63     return 0;
64 }

嗯嗯白白

posted @ 2019-07-15 12:25  喵呜,颜儿ღ  阅读(147)  评论(0编辑  收藏  举报