TLE #1#2#3求助dijkstra

P4779 【模板】单源最短路径(标准版)

小邱 @ 2022-04-04 16:54:15

#include<bits/stdc++.h>
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
const int N=100005,M=200005,inf=2147483647;
struct noode{
    int t,w,nxt;
}a[M];
struct no{
    int t,w;
    bool operator < (const no b) const {
    if(t>b.t)
        return 1;
    return 0;
    }
}p;
priority_queue<no>q;
int h[N],dis[N],k,n;
inline void add(int s,int t,int w)
{
    k++;
    a[k].nxt=h[s];
    a[k].t=t;
    a[k].w=w;
    h[s]=k;
}
void dijkstra(int s)
{
    p.t=s;
    p.w=0;
    q.push(p);
    int i,t,w,k;
    for(i=1;i<=n;i++)
    {
        dis[i]=inf;
    }
    dis[s]=0;
    while(q.size())
    {
        t=q.top().t;
        w=q.top().w;
        q.pop();
        if(w!=dis[t])
        {
            continue;
        }
        for(i=h[t];i;i=a[i].nxt)
        {
            w=a[i].w;
            k=a[i].t;
            if(dis[k]>dis[t]+w)
            {
                dis[k]=dis[t]+w;
                p.t=k;
                p.w=dis[k];
                q.push(p);
            }
        }
    }
}
int main()
{
    int i,x,y,z,m,s;
    scanf("%d%d%d",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
    }
    dijkstra(s);
    for(i=1;i<=n;i++)
    {
        printf("%d ",dis[i]);
    }
    return 0;
}

by RainFestival @ 2022-04-04 17:10:47

@小邱 你的比较函数 < 应该比较 w 而不是 t


by 小邱 @ 2022-04-04 17:29:03

@RainFestival 感谢感谢!


|