• P3371 【模板】单源最短路径(弱化版)


    【模板】单源最短路径(弱化版)

    题目背景

    本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779

    题目描述

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

    输入格式

    第一行包含三个整数 n , m , s n,m,s n,m,s,分别表示点的个数、有向边的个数、出发点的编号。

    接下来 m m m 行每行包含三个整数 u , v , w u,v,w u,v,w,表示一条 u → v u \to v uv 的,长度为 w w w 的边。

    输出格式

    输出一行 n n n 个整数,第 i i i 个表示 s s s 到第 i i i 个点的最短路径,若不能到达则输出 2 31 − 1 2^{31}-1 2311

    样例 #1

    样例输入 #1

    4 6 1
    1 2 2
    2 3 2
    2 4 1
    1 3 5
    3 4 3
    1 4 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    样例输出 #1

    0 2 4 3
    
    • 1

    提示

    【数据范围】
    对于 20 % 20\% 20% 的数据: 1 ≤ n ≤ 5 1\le n \le 5 1n5 1 ≤ m ≤ 15 1\le m \le 15 1m15
    对于 40 % 40\% 40% 的数据: 1 ≤ n ≤ 100 1\le n \le 100 1n100 1 ≤ m ≤ 1 0 4 1\le m \le 10^4 1m104
    对于 70 % 70\% 70% 的数据: 1 ≤ n ≤ 1000 1\le n \le 1000 1n1000 1 ≤ m ≤ 1 0 5 1\le m \le 10^5 1m105
    对于 100 % 100\% 100% 的数据: 1 ≤ n ≤ 1 0 4 1 \le n \le 10^4 1n104 1 ≤ m ≤ 5 × 1 0 5 1\le m \le 5\times 10^5 1m5×105 1 ≤ u , v ≤ n 1\le u,v\le n 1u,vn w ≥ 0 w\ge 0 w0 ∑ w < 2 31 \sum w< 2^{31} w<231,保证数据随机。

    Update 2022/07/29:两个点之间可能有多条边,敬请注意。

    对于真正 100 % 100\% 100% 的数据,请移步 P4779。请注意,该题与本题数据范围略有不同。

    样例说明:

    图片1到3和1到4的文字位置调换

    #include
    using namespace std;
    struct aty{
    	int v,w;
    };
    vector<aty> E[100001];
    queue<int> q;
    int n,m,s,dis[100001],u,v,w;
    bool vis[100001];
    int main(){
    	scanf("%d%d%d",&n,&m,&s);
    	for(int i=1;i<=m;i++){
    		scanf("%d%d%d",&u,&v,&w);
    		E[u].push_back({v,w});
    	}
    	q.push(s);
    	for (int i = 1; i <= n; i++)
    		dis[i] = 0x7FFFFFFF;
    	vis[s]=1;
    	dis[s]=0;
    	while(!q.empty()){
    		int u=q.front();
    		q.pop();
    		vis[u]=0;
    		for(int i=0;i<E[u].size();i++){
    			if(dis[E[u][i].v]>dis[u]+E[u][i].w){
    				dis[E[u][i].v]=dis[u]+E[u][i].w;
    				if(!vis[E[u][i].v]){
    					vis[E[u][i].v]=true;
    					q.push(E[u][i].v);
    				}
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
    		printf("%d ",dis[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    【C语言】-字符串函数和内存函数(下)
    Leetcode—189.轮转数组【中等】
    【无标题】
    threejs要点你值得学习
    人工智能在医疗健康领域的应用与发展
    【目标检测】|yolov6 结构代码分析
    5种促进业务增长的软件测试策略,我敢打赌你一定不知道?
    Android8.1 hal 加载wifi ko模块流程
    java-net-php-python-jsp宠物寄养系统计算机毕业设计程序
    从零开始基于Archlinux 安装 containerd + k8s
  • 原文地址:https://blog.csdn.net/m0_61360607/article/details/134403924