如果二代dijkstra算法可以向下完美兼容一代dijkstra算法,那么一代便应被之后的思考中不再被想起,或者说,忘掉?
我这个想法对吧?(^_^)
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 520;
int n,m,x,y,z,dis[N],e[N],w[N],ne[N],h[N],idx,st[N];
using pii = pair<int,int>;
priority_queue<pii,vector<pii>,greater<pii>> q;//小根堆
void add(int a,int y,int z)
{
e[idx] = y;w[idx] = z;ne[idx] = h[a];h[a] = idx++;
}
int main()
{
cin >> n >> m;
memset(dis,0x3f,sizeof dis);
memset(h,-1,sizeof h);
for(int i = 1 ; i <= m ; i++) {
cin >> x >> y >> z;
add(x,y,z);
}
dis[1] = 0;
q.push({0,1});//第一项是距离,第二项是起始点
while(q.size()){//可恶,前面那项是0
auto t = q.top();//项值中存储
q.pop();
if(st[t.second]) continue;
st[t.second] = true;
for(int i = h[t.second] ; i!=-1;i=ne[i]){
auto j = e[i];
if(dis[j] > t.first+w[i]) {//限制性回收,大大降低时间复杂度
dis[j] = t.first+w[i];
q.push({dis[j],j});
}
}
}
if(dis[n]==0x3f3f3f3f) cout << -1 << endl;
else cout << dis[n] << endl;
return 0;
}