1 条题解

  • 0

    跑得超快的 dijkstradijkstra

    
    
    #include<bits/stdc++.h>
    #define PII pair<int,int>
    using namespace std;
    
    const int N=1e5+10;
    int dis[N],hd[N],n,m,s,t,idx=1;
    struct Glist{
    int to,w,nxt;
    }e[N];
    bool vis[N];
    
    void add(int a,int b,int c)
    {
    e[idx].w=c;
    e[idx].to=b;
    e[idx].nxt=hd[a];
    hd[a]=idx++;
    }
    
    int Dijkstra()
    {
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0;
    priority_queue< PII,vector<PII>,greater<PII> >q;
    q.push( {0,s} );
    while(q.size())
    {
    PII t=q.top();
    int ver=t.second,dist=t.first;
    q.pop();
    
    if(vis[ver])continue;
    vis[ver]=1;
    
    for(int i=hd[ver];i!=-1;i=e[i].nxt)
    {
    int j=e[i].to;
    if(dis[j]>dis[ver]+e[i].w)
    {
    dis[j]=dis[ver]+e[i].w;
    q.push( {dis[j],j} );
    }
    }
    
    }
    if(dis[t]==0x3f3f3f3f)
    {
    return -1;
    }
    return dis[t];
    
    }
    
    int main()
    {
    cin>>n>>m>>s>>t;
    memset(hd,-1,sizeof(hd));
    for(int i=1;i<=m;++i)
    {
    int a,b,c;
    cin>>a>>b>>c;
    add(a,b,c);
    add(b,a,c);
    }
    cout<<Dijkstra();
    return 0;
    }
    
    
    • 1

    信息

    ID
    2819
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    61
    已通过
    11
    上传者