萌新求助,玄关。
#include <bits/stdc++.h>
using namespace std;
int n,m,s;
int dis[150005];
bool vis[150005];
vector<pair<int,int > > a[150005];
priority_queue<pair<int,int >,vector<pair<int,int > >,greater<pair<int,int > > > q;
int main(){
memset(dis,0x3f,sizeof(dis));
cin>>n>>m>>s;
for(int i = 1;i <= m;i++){
int x,y,z;
cin>>x>>y>>z;
a[x].push_back({y,z});
}
dis[s] = 0;
q.push({0,s});
while(!q.empty()){
int k = q.top().second;
q.pop();
if(vis[k] == true){
continue;
}
vis[k] = true;
for(int j = 0;j < a[k].size();j++){
int y,z;
y = a[k][j].first;
z = a[k][j].second;
if(dis[k] + z < dis[y]){
dis[y] = dis[k] + z;
q.push({dis[y],y});
}
}
}
for(int i = 1;i <= n;i++){
if(dis[i] == 0x3f3f3f3f){
cout<<INT_MAX<<" ";
}
else{
cout<<dis[i]<<" ";
}
}
return 0;
}
1.为什么上面的 q.top().first 根本没用过,删去了就会WA on #1 #2 #3 #4 ?
2.为什么优先队列中用到了 pair 却不需要重载 < 运算符?