昂昂昂
有负权,所以果断spfa,再改一些些细枝末节的东西,新鲜的代码就出炉了,两面煎至金黄,隔壁家的小孩都馋哭了~~~
1 #include<set> 2 #include<map> 3 #include<list> 4 #include<queue> 5 #include<stack> 6 #include<string> 7 #include<cmath> 8 #include<ctime> 9 #include<vector> 10 #include<bitset> 11 #include<memory> 12 #include<utility> 13 #include<cstdio> 14 #include<sstream> 15 #include<iostream> 16 #include<cstdlib> 17 #include<cstring> 18 #include<algorithm> 19 using namespace std; 20 21 int n,m,z,y,a,b,c; 22 queue<int> q;//堆优化 23 int d[10001]; 24 bool inque[10001]; 25 struct node{ 26 int t,dist; 27 }; 28 vector<node> g[10000]; 29 30 bool spfa(int s){//spfa板子 31 memset(d,0x3f,sizeof(d)); 32 memset(inque,0,sizeof(inque)); 33 d[s]=0; 34 q.push(s); 35 inque[s]=true; 36 while(!q.empty()){ 37 int u=q.front(); 38 q.pop(); 39 inque[u]=false; 40 for(int i=0;i<g[u].size();i++){ 41 int v=g[u][i].t; 42 int w=g[u][i].dist; 43 if(d[u]+w<d[v]){ 44 d[v]=d[u]+w; 45 if(inque[v]==false){ 46 q.push(v); 47 inque[v]=true; 48 } 49 } 50 } 51 } 52 } 53 54 int main(){ 55 scanf("%d%d%d%d",&n,&m,&z,&y); 56 for(int i=1;i<=m;i++){ 57 scanf("%d%d%d",&a,&b,&c); 58 g[a].push_back((node){b,c});//两遍 59 g[b].push_back((node){a,c}); 60 } 61 spfa(z); 62 printf("%d ",d[y]); 63 return 0; 64 }
嗯嗯白白