玄关,深入浅出代码是错的
查看原帖
玄关,深入浅出代码是错的
1176429
Man_Ba楼主2025/6/27 16:53

深入浅出代码长这样,用链式前向星改写后(spfa部分):

bool spfa(){
	queue<int> Q;
	for(int i = 1;i <= n;i++){
		dis[i] = inf;
		vis[i] = 0;
	}
	Q.push(0);
	dis[0] = 0,vis[0] = 1,sum[0] = 1;
	while(!Q.empty()){
		int u = Q.front();
		Q.pop();
		vis[u] = 0;
		for(int i = h[u];i;i = nxt[i]){
			int v = to[i];
			if(dis[v] > dis[u] + val[i]){
				dis[v] = dis[u] + val[i];
				if(vis[v] == 0){
					vis[v] = 1;
					Q.push(v);
					sum[v]++;
					if(sum[v] > n + 1) return 1;
				}
			}
		}
	}
	return 0;
}

但是只有37pts,改成这样:

bool spfa(){
	queue<int> Q;
	for(int i = 1;i <= n;i++){
		dis[i] = inf;
		vis[i] = 0;
	}
	Q.push(0);
	dis[0] = 0,vis[0] = 1,sum[0] = 1;
	while(!Q.empty()){
		int u = Q.front();
		Q.pop();
		vis[u] = 0;
		for(int i = h[u];i;i = nxt[i]){
			int v = to[i];
			if(dis[v] > dis[u] + val[i]){
				dis[v] = dis[u] + val[i];
				if(vis[v] == 0){
					vis[v] = 1;
					Q.push(v);
					sum[v]++;
					if(sum[v] > n) return 1;
				}
			}
		}
	}
	return 0;
}

n+1n+1 改成 nnAC了,为什么?

2025/6/27 16:53
加载中...