预先声明:本人蒟蒻
一个用了vector的堆优化Dijkstra不知为何TLE了
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{int x,d;};
int n,m,s,dis[100005]; bool vis[100005];
vector<node> v[100005];
bool operator >(const node &x,const node &y)
{
return x.d>y.d;
}
bool operator <(const node &x,const node &y)
{
return x.d<y.d;
}
priority_queue<node,vector<node>,greater<node> > q;
void dijkstra(int s)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<=n;i++) dis[i]=INT_MAX;
q.push(node{s,0});
dis[s]=0;
while(!q.empty())
{
node now=q.top();
q.pop();
vis[now.x]=1;
for(int i=0;i<v[now.x].size();i++)
{
if(!vis[v[now.x][i].x]&&dis[v[now.x][i].x]>dis[now.x]+v[now.x][i].d)
{
dis[v[now.x][i].x]=dis[now.x]+v[now.x][i].d;
q.push(node{v[now.x][i].x,dis[v[now.x][i].x]});
}
}
}
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
v[x].push_back(node{y,z});
}
dijkstra(s);
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}
望相助!