一种奇怪的堆优化做法
#include<bits/stdc++.h>
using namespace std;
#define INF 2147483647
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > >heap;
vector<int> to[200005],len[200005];
vector<int>::iterator it;
int dis[200005];
bool vis[200005];
int n,m,a,b,c,s;
void add(int x,int y,int z)
{
to[x].push_back(y);
len[x].push_back(z);
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c;
add(a,b,c);
dis[i]=INF;
}
dis[s]=0;
heap.push(make_pair(0,s));
while(!heap.empty())
{
int x=heap.top().second;
heap.pop();
if(!vis[x])
{
vis[x]=1;
for(it=to[x].begin();it!=to[x].end();it++)
{
if(dis[*it]>dis[x]+len[x][*it])
{
dis[*it]=dis[x]+len[x][*it];
heap.push(make_pair(dis[*it],*it));
}
}
}
}
for(int i=1;i<=n;++i) printf("%d ",dis[i]);
return 0;
}
样例输出
0 4 0 3
求大佬看看