思路:裸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大法好,哈哈哈。