C++-POJ1502-MPI Maelstrom-[最短路][spfa][栈优化]

我不理解为什么写dijkska就WA呢?

atoi()是个好东西,给你个颜色,自己体会

疑惑!疑惑!疑惑!

 1 #include <queue>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 const int INF=1e9,MAXN=105,MAXM=10010;
 6 int w(){char s[15];scanf("%s",s);return s[0]=='x'?INF:atoi(s);}
 7 struct edge{
 8     int v,w,next;
 9     edge(int v=0,int w=0,int next=0):v(v),w(w),next(next){}
10 };
11 edge E[MAXM];int head[MAXN],cnt;
12 void add(int u,int v,int w){
13     E[++cnt]=edge(v,w,head[u]),head[u]=cnt;
14     E[++cnt]=edge(u,w,head[v]),head[v]=cnt;
15 }
16 int dis[MAXN],vis[MAXN],stack[MAXN],top;
17 int spfa(int s,int n){
18     for(int i=1;i<=n;i++)vis[i]=0,dis[i]=INF;
19     top=0,stack[++top]=1,vis[s]=1,dis[s]=0;
20     for(int u;top>=0;){
21         u=stack[top--],vis[u]=0;
22         for(int i=head[u],v,w;v=E[i].v,w=E[i].w,i;i=E[i].next)
23             if(dis[v]>dis[u]+w){
24                 dis[v]=dis[u]+w;
25                 if(!vis[v])stack[++top]=v,vis[v]=1;
26             }
27     }
28     int ans=0;
29     for(int i=1;i<=n;i++)ans=max(ans,dis[i]);
30     return ans;
31 }
32 int main(){
33     int n;scanf("%d",&n);
34     for(int i=2;i<=n;i++)for(int j=1;j<i;j++)add(i,j,w());
35     printf("%d
",spfa(1,n));
36     return 0;
37 } 
~~Jason_liu O(∩_∩)O
原文地址:https://www.cnblogs.com/JasonCow/p/12369492.html