社区讨论

111111

P4366[Code+#4] 最短路参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@ly9jtnyg
此快照首次捕获于
2024/07/06 11:12
2 年前
此快照最后确认于
2024/07/06 13:46
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int oo=1000000000;
const int M=100005;
int tot,Next[10*M],to[10*M],len[10*M],head[M];
int n,m;
int d[M],mark[M],Q[10*M];
void add(int a,int b,int c)
{
	Next[tot]=head[a],to[tot]=b,len[tot]=c;
	head[a]=tot++;
}
void SPFA(int g)
{
	for(int i=1;i<=n;i++)
	{
		d[i]=oo;mark[i]=0;
	}
	int st=0,ed=0;
	Q[ed++]=g;
	d[g]=0,mark[g]=1;
	while(st<ed)
	{
		int x=Q[st++];
		mark[x]=0;
		for(int i=head[x];i!=-1;i=Next[i])
		{
			int y=to[i],z=len[i];
			if(d[y]>d[x]+z)
			{
				d[y]=d[x]+z;
				if(! mark[y])
				{
					mark[y]=1;
					Q[ed++]=y;
				}
			}
		}
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	tot=0;
	for(int i=1;i<=n;i++)
	{
		head[i]=-1;
	}
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c);
		add(b,a,c); 
	}
	SPFA(1);
	printf("%d\n",d[n]);
} 

回复

3 条回复,欢迎继续交流。

正在加载回复...