90分代码求调,第五个点过不了!!!!
查看原帖
90分代码求调,第五个点过不了!!!!
858267
lizi6666楼主2024/11/24 00:08

90分代码求调,第五个点过不了!

#include<bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e5+100;
int n,m,h[N],cnt,s1[N],s2[N],q[N];
struct bian{
	int ne,zhi,w;
}a[N];
void add(int x,int y,int z){
	a[++cnt].zhi=y;
	a[cnt].w=z;
	a[cnt].ne=h[x];
	h[x]=cnt;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	memset(s1,127,sizeof(s1));
	memset(s2,127,sizeof(s2));
	s1[1]=0;
	int tou=0,wei=0;
	q[++tou]=1;
	while(wei<tou){
		int u=q[++wei];
		for(int e=h[u];e;e=a[e].ne){
			int v=a[e].zhi,w=a[e].w;
			if(s1[u]+w<s1[v]){
				if(s2[u]+w<s1[v])s2[v]=s2[u]+w;
				else s2[v]=s1[v];
				s1[v]=s1[u]+w;
				q[++tou]=v;
			}else if(s1[u]+w>s1[v]){
				if(s1[u]+w<s2[v]){
					s2[v]=s1[u]+w;
					q[++tou]=v;
				}
			}else if(s1[u]+w==s1[v]){
				if(s2[u]+v<s2[v])s2[v]=s2[u]+w;
			}
		}
	}
	cout<<s2[n];
	return 0;
}
2024/11/24 00:08
加载中...