求捞,悬关
查看原帖
求捞,悬关
622724
l_615楼主2023/7/18 15:56

用的迪杰斯特拉过不去qwq

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int const N=1e4+10;
int const M=5e5+10;
int const INF=(1ll<<31)-1;
int head[M];
ll dix[N];
int tot=0;
int vis[N];
int n,m,s;
struct Edge{
	int to,d,nxt;
}edge[M];
void add(int u,int v,int w)
{
	edge[tot].to=v;
	edge[tot].d=w;
	edge[tot].nxt=head[tot];
	head[u]=tot++;
}
void dij()
{
	for(int i=1;i<=n;i++)
	{
		dix[i]=INF;
	}
	dix[s]=0;
	int x;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++)
	{
		x=0;
		for(int j=1;j<=n;j++)
		{
			if(!vis[x]&&(x==0||dix[j]<dix[x]))
			{
				x=j;
			}
		}
		vis[x]=1;
		for(int j=head[x];j!=-1;j=edge[j].nxt)
		{
			int v=edge[j].to;
			dix[v]=min(dix[v],1ll*edge[j].d+dix[x]);
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&s);
	int u,v,w;
	memset(head,-1,sizeof(head));
	while(m--)
	{
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	dij();
	for(int i=1;i<n;i++)
		printf("%lld ",dix[i]);
	printf("%lld\n",dix[n]);
	return 0;
 } 

哪位大佬帮忙看一下,感谢

2023/7/18 15:56
加载中...