P1828 SPFA WA 0pts悬2关求调
  • 板块学术版
  • 楼主988176_
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/1/8 20:46
  • 上次更新2024/1/9 08:53:36
查看原帖
P1828 SPFA WA 0pts悬2关求调
988176
988176_楼主2024/1/8 20:46

rt,不要在意马蜂

#include<bits/stdc++.h>
using namespace std;
struct Edge
{
	int to,dis;
};
int dis[114514],vis[114514],n,p,c,minn=1145141919,pasture[114514];
vector<Edge>vec[114514];
void spfa(int start)
{
	queue<int>q;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=p;++i)dis[i]=1145141919;
	q.push(start),dis[start]=0,vis[start]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop(),vis[u]=0;
		for(int i=0;i<vec[u].size();++i)
		{
			if(dis[u]+vec[u][i].dis<dis[vec[u][i].to])
			{
				dis[vec[u][i].to]=dis[u]+vec[u][i].dis;
				if(!vis[vec[u][i].to])q.push(vec[u][i].to),vis[vec[u][i].to]=1;
			}
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&p,&c);
	for(int i=1;i<=n;++i)scanf("%d",&pasture[i]);
	for(int i=1,u,v,w;i<=c;++i)scanf("%d%d%d",&u,&v,&w),vec[i].push_back({v,w}),vec[i].push_back({u,w});
    for(int i=1;i<=p;++i)
	{
        spfa(i);
        int sum=0;
        for(int j=1;j<=n;++j)sum+=dis[pasture[j]];
        minn=min(minn,sum);
    }
	printf("%d",minn);
}
2024/1/8 20:46
加载中...