spfa初学0分(TLE+WA)求调
查看原帖
spfa初学0分(TLE+WA)求调
374443
shawn0618楼主2024/12/6 21:09

样例对了,数据测了也对了。

#include <bits/stdc++.h>
using namespace std;

struct node{
	long long v,w;
};
long long n,m,t,x,y,z,vis[10010];
vector <node> a[10010];
queue <long long> q;
int spfa(int e){
	memset(vis,0x3f,sizeof(vis));
	q.push(x);
	vis[x]=0;
	while (!q.empty()){
		long long u=q.front();
		for (int i=0;i<int(a[u].size());i++){
			int v=a[u][i].v,w=a[u][i].w;
			if (vis[v]==0x3f3f3f3f || vis[v]>vis[u]+w){
				vis[v]=vis[u]+w;
				q.push(v);
			}
		}
		q.pop();
	}
	return vis[e];
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>x;
	for (int i=1;i<=m;i++){
		cin>>x>>y>>z;
		a[x].push_back({y,z});
		a[y].push_back({x,z});
	} 
	for (int i=1;i<=n;i++){
		long long ans=spfa(i);
		if (ans==0x3f3f3f3f)  cout<<-1<<" ";
		else  cout<<ans<<" ";
	}
	return 0;
} 
2024/12/6 21:09
加载中...