使用Dijkstar,但是程序就不能输出745,只能输出35
查看原帖
使用Dijkstar,但是程序就不能输出745,只能输出35
286752
h1910819075楼主2021/4/30 14:12

求助大佬们,我的代码对于第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;
}
2021/4/30 14:12
加载中...