spfa 小白求助
查看原帖
spfa 小白求助
1046923
in_shadow楼主2024/12/11 13:28
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,z,tot,h[200005],dis[2005],in_que[200005],minx=200000000;
struct road{
	int v,w,next;
}e[220005]; 
void add(int u,int v,int w)
{
	e[++tot]={v,w,h[u]};
	h[u]=tot;
} 
queue<int> q;
void spfa(int b)
{
	memset(dis,0x3f,sizeof(dis));
	q.push(b);
	in_que[b]=1;
	dis[b]=0;
	while(q.size())
	{
		int u=q.front();
		q.pop();
		in_que[u]=0;
		for(int i=h[u];i;i=e[i].next)
		{
			int v=e[i].v;
			if(dis[v]>dis[u]+e[i].w)
			{
				dis[v]=dis[u]+e[i].w;
				if(!in_que[v])
				{
					in_que[v]=1;
					q.push(v);
				}
			}		 
		}
	}
}
int main(){
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=m;i++)
{
	scanf("%d %d %d",&x,&y,&z);
	add(x,y,z);
	add(y+n,x+n,z);
}
spfa(k);
spfa(k+n);
for(int i=1;i<=n;i++)
	minx=min(minx,dis[i]+dis[i+n]);
printf("%d",minx);
	return 0;
}
2024/12/11 13:28
加载中...