社区讨论

90pts求条...

P3371【模板】单源最短路径(弱化版)参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mhj25i55
此快照首次捕获于
2025/11/03 19:29
4 个月前
此快照最后确认于
2025/11/03 19:29
4 个月前
查看原帖
非常猎奇的解法不要在意。
https://www.luogu.com.cn/record/list?pid=P3371&user=1905662 ———测试点详情
如回必关
codecode CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 +5;
int n,m,start,i,j,k;
int u[maxn],v[maxn],w[maxn],first[maxn],nex[maxn],dis[maxn],book[maxn],que[maxn],head=1,tail=1;
int main(void)
{
	cin>>n>>m>>start;
	for(int i=1;i<=n;i++) dis[i]=999999;
	for(int i=1;i<=n;i++) first[i]=-1;
	dis[start]=0;
	for(int i=1;i<=m;i++){
		cin>>u[i]>>v[i]>>w[i];
		nex[i]=first[u[i]];
		first[u[i]]=i;
	}
	que[tail]=start;
	tail++;
	book[start]=1;
	while(head<tail){
		k=first[que[head]];
		while(k!=-1){
			if(dis[v[k]]>dis[u[k]]+w[k]){
				dis[v[k]]=dis[u[k]]+w[k];
				if(book[v[k]]==0){
					que[tail]=v[k];
					tail++;
					book[v[k]]=1;
				}
			}
			k=nex[k];
		}
		book[que[head]]=0;
		head++;
	}
	for(int i=1;i<=n;i++)
    {
        if(dis[i]==999999)
        {
            cout<<2147483647;
        }
        else
        {
            cout<<dis[i]<<" ";
        }
	}
	return 0;
}

回复

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

正在加载回复...