第一届佳木斯大学程序设计校赛(同步赛) 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 }

 

posted @ 2022-04-30 14:41  爱吃虾滑  阅读(35)  评论(0)    收藏  举报