dijkstra模版修改,样例过了,提交0分
查看原帖
dijkstra模版修改,样例过了,提交0分
393811
大海中的孤帆楼主2023/8/7 16:12
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int f[5010][5010];//再大就MLE了,实在开不了
int d[10010];
bool v[10010];
int qm(int a,int b)
{
	if(a<b)
		return a;
	return b;
}
void dijkstra()
{
	for(int i=1;i<=n;++i)
	{
		d[i]=2147483647;
		v[i]=0;
	}
	d[1]=0;
	for(int i=1;i<n;++i)
	{
		int x=0;
		for(int j=1;j<=n;++j)
		{
			if(!v[j]&&(x==0||d[x]>d[j]))
			{
				x=j;
			}
		}
		v[x]=true;
		for(int y=1;y<=n;++y)
		{
			if(f[x][y]!=-1)
				d[y]=qm(d[y],d[x]+f[x][y]);
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=n;++i)
	{
		f[i][i]=0;
	}
	for(int i=1;i<=m;++i)
	{
		int a,b,c;
		cin>>a>>b>>c;
		if(a<s)
			a=a+n-s+1;
		else
			a=a-s+1;
		if(b<s)
			b=b+n-s+1;
		else
			b=b-s+1;
		f[a][b]=c;
	}
	dijkstra();
	for(int i=1;i<=n;++i)
	{
		if(d[i]==0x3f)
			d[i]=2147483647;
		cout<<d[i]<<" ";
	}
	return 0;
}
2023/8/7 16:12
加载中...