第一届佳木斯大学程序设计校赛(同步赛) E线路
题目链接 https://ac.nowcoder.com/acm/contest/27274/E
模板题 用的Bellman-ford
(此题不需要判断负环)
放AC代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N = 20000+10; 4 const int INF = 0x3f3f3f3f; 5 int n,m,s,t; 6 int dis[N]; 7 bool vis[N]; 8 9 struct Edge 10 { 11 int u,v,w; 12 }; 13 vector<Edge>e; 14 15 void bellman_ford() 16 { 17 for(int i=1; i<=n; i++) 18 dis[i]=INF; 19 dis[s]=0; 20 for(int i=1; i<=n; i++)//=n用来判断负环 21 { 22 bool flag=true; 23 for(int j=1; j<2*m; j++) 24 { 25 if(dis[e[j].u]!=INF && dis[e[j].v]>dis[e[j].u]+e[j].w) 26 { 27 dis[e[j].v]=dis[e[j].u]+e[j].w; 28 flag=false; 29 } 30 } 31 if(flag && i==n) return;//判断负环 32 } 33 } 34 35 int main() 36 { 37 cin>>n>>m>>s>>t; 38 for(int i=1; i<=m; i++) 39 { 40 int u,v,w; 41 cin>>u>>v>>w; 42 e.push_back({u,v,w}); 43 e.push_back({v,u,w}); 44 } 45 bellman_ford(); 46 if(dis[t]>INF/2) 47 cout<<"-1"; 48 else 49 cout<<dis[t]; 50 return 0; 51 }