求助
查看原帖
求助
215817
gyc071116楼主2024/7/25 08:22

疑问:第28行for循环中“j<tu[now_node].size()”改为“j<=tu[now_node].size()-1”为什么会RE

#include<bits/stdc++.h>
using namespace std;
struct edge{
	int value;
	int in;
};
vector<edge> tu[100005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
int path[100005];
void edge_add(int node_out,int node_in,int val){
	edge a;
	a.in=node_in;
	a.value=val;
	tu[node_out].push_back(a);
}
int main(){
	int n,m,s;
	memset(path,63,sizeof(path));
	scanf("%d %d %d",&n,&m,&s);
	path[s]=0;
	int u,v,w;
	for(int i=1;i<=m;i++){
		scanf("%d %d %d",&u,&v,&w);
		edge_add(u,v,w);
	}
	int now_node=s;
	for(int i=1;i<=n;i++){
		for(int j=0;j<tu[now_node].size();j++){
			if(path[tu[now_node][j].in]>path[now_node]+tu[now_node][j].value){
				path[tu[now_node][j].in]=path[now_node]+tu[now_node][j].value;
				q.push(make_pair(path[tu[now_node][j].in],tu[now_node][j].in));
			}
		}
		int path_min;
		while(!q.empty()){
			if(q.top().first==path[q.top().second]){
				path_min=q.top().first;
				now_node=q.top().second;
				q.pop();
				break;
			}
			else q.pop();
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",path[i]);
	return 0;
}

(以上代码可AC)

2024/7/25 08:22
加载中...