求助大佬们,我的代码对于第8个测试点,只能输出35,无论我是用SPFA还是Dijkstra,都是35,帮我看看吧!(T_T)
#include<bits/stdc++.h>
#define MP make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pill;
const int N=1e5+100;
vector<pill> e[N];
ll dis[N],num[N],w[N];
int vis[N];
int n,m;
inline ll Dijkstra()
{
memset(dis,0x7f,sizeof(dis));
priority_queue<pair<ll,int> > q;
q.push(MP(-dis[1],1));
dis[1]=0;
ll minn1=0x7f7f7f7f,minn2=0x7f7f7f7f;
while(!q.empty())
{
int now=q.top().second;
q.pop();
if(vis[now]) continue;
vis[now]=1;
for(int i=0;i<e[now].size();i++)
{
int y=e[now][i].first;
int d=e[now][i].second;
if(d+dis[now]<=dis[y])
{
dis[y]=d+dis[now];
if(y==n)
{
minn2=minn1;
minn1=dis[y];
}
q.push(MP(-dis[y],y));
}
else if(y==n)
minn2=min(minn2,d+dis[now]);
}
}
//printf("%lld %lld \n",minn1,minn2);
return (minn2-minn1);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e[u].push_back(MP(v,w));
e[v].push_back(MP(u,w));
}
printf("%lld\n",Dijkstra());
return 0;
}