Dijkstra ,priority_queue优化 ,使用STL
不开O2:#2 #3 #6 TLE
O2:#3 TLE (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;
}
真的是由于STL效率差的原因吗?