求助spfa算法输出错误
  • 板块P1364 医院设置
  • 楼主isme1
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/1 20:33
  • 上次更新2024/4/1 23:09:37
查看原帖
求助spfa算法输出错误
912779
isme1楼主2024/4/1 20:33
#include <bits/stdc++.h>
#define int long long
using namespace std;
int inf=5e9+7,vis[105],mi=6e9+7,n,head[100005],cnt=0,dp[10005];
queue<int>q;
struct su{
    int nxt,val,to;
};
su edge[100005];
void add(int w,int from,int v){
	edge[++cnt].nxt=head[from];
	edge[cnt].val=w;
	edge[cnt].to=v;
	head[from]=cnt;
}
void spfa(int now){
	
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=head[x];i!=0&&edge[i].to!=0&&x!=0;i=edge[i].nxt){
			if(vis[edge[i].to]){
				continue;
			}
			q.push(edge[i].to);
			vis[edge[i].to]=1;
		    dp[edge[i].to]=min(dp[edge[i].to],dp[x]+edge[i].val);
		}
	}
}
signed main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
    	int w,u,v;
    	cin>>w>>u>>v;
    	add(w,i,v);
    	add(w,i,u);
    	add(w,v,i);
    	add(w,u,i);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			dp[j]=inf;
			vis[j]=0;
		}
		dp[i]=0;
		vis[i]=1;
		q.push(i);
		spfa(i);
		int sum=0;
		for(int j=1;j<=n;j++){
			sum+=dp[j];
		}
		mi=min(mi,sum);
	}
	cout<<mi;
	return 0;
}


2024/4/1 20:33
加载中...