RT
就一次短路不知道为啥一直不对,求助 /kel
Code:
#include<bits/stdc++.h>
using namespace std;
const int N=5005;
int n,m,u,v,w,dis1[N],dis2[N];
struct Node{
int v,d;
bool operator < (const Node &rhs) const {
return d>rhs.d;
}
}vex;
vector<Node>G[N];
void Getdis(int x){
memset(dis1,0x3f,sizeof dis1);
memset(dis2,0x3f,sizeof dis2);
dis1[x]=0;
priority_queue<Node>pq;
vex.v=x;vex.d=0;
pq.push(vex);
while(!pq.empty()){
vex=pq.top();pq.pop();
int v=vex.v,d=vex.d,j;
for(int i=0;i<G[v].size();i++){
j=G[v][i].v;
if(dis1[v]+G[v][i].d<dis1[j]){
dis2[j]=dis1[j];
dis1[j]=dis1[v]+G[v][i].d;
vex.v=j;vex.d=dis1[j];
pq.push(vex);
vex.d=dis2[j];
pq.push(vex);
}
else if(dis1[v]+G[v][i].d>dis1[j]&&dis1[v]+G[v][i].d<dis2[j]){
dis2[j]=dis1[v]+G[v][i].d;
vex.v=j;vex.d=dis2[j];
pq.push(vex);
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
vex.v=v;vex.d=w;
G[u].push_back(vex);
vex.v=u;
G[v].push_back(vex);
}
Getdis(1);
printf("%d",dis2[n]);
return 0;
}
/*
#3 input:
5 10
1 2 1982
2 3 3963
3 4 2046
3 5 1353
4 2 1370
4 1 2192
5 3 2898
4 3 1395
4 1 3722
3 2 4596
#3 output:
5591
*/