想请问大佬,为什么用优先队列会T一个数据,而普通队列则不会呢
查看原帖
想请问大佬,为什么用优先队列会T一个数据,而普通队列则不会呢
294316
无敌联盟楼主2021/6/5 12:01

优先队列版本

void spfa() {
	priority_queue<pii, vector<pii>, greater<pii> > heap;
	heap.push({0, 1}); vis[1] = 1;
	while(heap.size()) {
		ll t = heap.top().second; heap.pop(); vis[t] = 0;
		for(int i = h[t]; i != -1; i = edges[i].next) {
			int j = edges[i].e;
			if(dist[j] > dist[t] + edges[i].w) {
				dist[j] = dist[t] + edges[i].w;
				cnt[j] = cnt[t] + 1;
				if(cnt[j] >= n) {
					cout << "YES\n";
					return ;
				}
				if(vis[j] == 0) {
					vis[j] = 1;
					heap.push({dist[j], j});
				}
			}
		}
	} 
	cout << "NO\n";
	return ;
}
2021/6/5 12:01
加载中...