萌新求助次短路,只有 50pts
查看原帖
萌新求助次短路,只有 50pts
100910
⚡小林子⚡海棠喵楼主2020/8/23 22:02

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
*/ 
2020/8/23 22:02
加载中...