首页 > 代码库 > 洛谷P1339 [USACO09OCT]热浪Heat Wave

洛谷P1339 [USACO09OCT]热浪Heat Wave

思路:裸SPFA过一遍(建议使用邻接链表存储),无向图,无向图,无向图,重要的事情要说三遍!!!蜜汁RE是什么鬼????第九个点数组开到20K,第十个点数组开到30K才AC。或许我代码写的有bug?(逃

CODE:

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 queue<int>q;
 5 struct Edge{
 6     int pre,to,w;
 7 }edge[30000];
 8 int head[30000];
 9 bool if_q[30000];
10 int dis[30000];
11 int T, C, Ts, Te,Rs, Re,Ci;
12 int num_edge;
13 inline void add_edge(int from,int to,int w)
14 {
15     edge[++num_edge].pre=head[from];
16     edge[num_edge].to=to;
17     edge[num_edge].w=w;
18     head[from]=num_edge;
19 }
20 inline void spfa(int u)
21 {
22      q.push(u);
23      if_q[u]=true;
24      while(!q.empty())
25      {
26          u=q.front();
27          for(int i=head[u]; i!=0; i=edge[i].pre)
28          {
29              int v=edge[i].to;
30              if(dis[u]+edge[i].w<dis[v])
31              {
32                  dis[v]=dis[u]+edge[i].w;
33                  if_q[v]=true;
34                  q.push(v);
35              }
36          }
37          if_q[u]=false;
38          q.pop();
39       }
40 }
41 int main()
42 {
43     for(int i=0;i<30000;i++)
44         dis[i]=0x7fffffff;
45     cin>>T>>C>>Ts>>Te;
46     for(int i=0;i<C;i++)
47     {
48         cin>>Rs>>Re>>Ci;
49         add_edge(Rs,Re,Ci);
50         add_edge(Re,Rs,Ci);
51     }
52     dis[Ts]=0;
53     spfa(Ts);
54     cout<<dis[Te];
55     return 0;
56 }

注:就是模板题,STL大法好,哈哈哈。

洛谷P1339 [USACO09OCT]热浪Heat Wave