蒟蒻求助:TLE,Dijkstra,priority_queue优化
查看原帖
蒟蒻求助:TLE,Dijkstra,priority_queue优化
421773
unsigned_char楼主2021/8/1 22:08

Dijkstra ,priority_queue优化 ,使用STLDijkstra\ ,priority\_queue\texttt{优化}\ ,\texttt{使用STL}

不开O2:#2 #3 #6 TLE  \texttt{不开O2}:\#2\ \#3\ \#6\ \colorbox{#052242}{\color{white}\texttt{\:TLE\;}}

O2:#3 TLE   (1.17s)\mathtt{O2}:\#3\ \colorbox{#052242}{\color{white}\texttt{\:TLE\;}}\ (\mathit{1.17s)}

代码:

#include<iostream>
#include<functional>
#include<vector>
#include<queue>

using std::cin;
using std::cout;
using std::vector;
using std::priority_queue;
using std::greater;

class Node
{
public:
    int to;
    int weight;
};

class Tmp
{
public:
    int index;
    int ans;
};

#define MAX 0x7fffffff
vector<vector<Node>> G;
vector<int> dist;

bool operator> (const Tmp a,const Tmp b)
{
    return a.ans>b.ans;
}

void Dijkstra(int s)
{
    Tmp next,tmp;
    dist[s]=0;
    priority_queue<Tmp,vector<Tmp>,greater<Tmp>> Q;
    next.index=s;
    next.ans=0;
    Q.push(next);
    while(!Q.empty())
    {
        tmp=Q.top();
        Q.pop();
        int k=tmp.index;
        for(auto i:G[k])
        {
            if(dist[k]+i.weight<dist[i.to])
            {
                dist[i.to]=dist[k]+i.weight;
                next.ans=dist[i.to];
                next.index=i.to;
                Q.push(next);
            }
        }
    }
    return;
}

int main()
{
    int n,m,s;
    int u,v,w;
    Node tmp;
    cin>>n>>m>>s;
    G.resize(n);
    dist.resize(n,MAX);
    for(int i=0;i<m;++i)
    {
        cin>>u>>v>>w;
        tmp.to=v-1;
        tmp.weight=w;
        G[u-1].push_back(tmp);
    }
    Dijkstra(s-1);
    for(auto i:dist)
        cout<<i<<" ";
    return 0;
}

真的是由于STLSTL效率差的原因吗?

2021/8/1 22:08
加载中...