SPFA求助
  • 板块学术版
  • 楼主WD2c0mP
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/3/5 16:52
  • 上次更新2023/10/23 22:57:08
查看原帖
SPFA求助
780641
WD2c0mP楼主2023/3/5 16:52

P4779 请问构造数据是怎么卡SPFA的?

复杂度应该是O(nlogn)O(n\log n)alt xxx

#include<bits/stdc++.h>
using namespace std;
const long long inf = 2147483647,N = 100005,M = 500005;
int n,m,s,dis[N],vis[N];
vector<pair<int,int> >G[N];
void spfa() {
	queue<int>q;
	for (int i = 1;i <= n;i ++) {
		dis[i] = inf;
		vis[i] = 0;
	}
	q.push(s);
	dis[s] = 0;
	vis[s] = 1;
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		vis[u] = 0;
		for (unsigned i = 0;i < G[u].size();i ++) {
			int v = G[u][i].first;
			if (dis[v] > dis[u] + G[u][i].second) {
				dis[v] = dis[u] + G[u][i].second;
				if (vis[v] == 0) {
					vis[v] = 1;
					q.push(v);
				}
			}
		}
	}
}
int main(){
	cin >> n >> m >> s;
	for (int i = 1;i <= m;i ++) {
		int u,v,w;
		cin >> u >> v >> w;
		G[u].push_back(make_pair(v,w));
	}
	spfa();
	for (int i = 1;i <= n;i ++) {
		if (s == i) cout << 0 << " ";
		else cout << dis[i] << " ";
	}
	return 0;
} 
2023/3/5 16:52
加载中...