疑问,玄关
查看原帖
疑问,玄关
1129166
wangzilong913楼主2024/7/23 15:15

萌新求助,玄关。

#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 却不需要重载 < 运算符?

2024/7/23 15:15
加载中...