社区讨论

求解为什么全WA

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mi6x4vv9
此快照首次捕获于
2025/11/20 12:15
4 个月前
此快照最后确认于
2025/11/20 12:15
4 个月前
查看原帖
CPP
#include <cstdio>
#define SM 4026000
#define MAXSM 2147483647
int n , m , s ;
int x , y , z ;
int q[SM] , head[SM] ;
int vis[SM] , dis[SM] ;
int cnt , l , r ;
struct edge{
    int x , y , z , next ;
}e[SM];

inline int add_edge ( int x , int y , int z ) {
    cnt ++ ;
    e[cnt].x = x , e[cnt].y = y , e[cnt].z = z ;
    e[cnt].next = head[x] , head[x] = cnt ;
    return 0 ;
}

int main () {
    std :: scanf ( "%d%d%d" , &n , &m , &s ) ;
    for ( int i = 1 ; i <= m ; i ++ ) {
        std :: scanf ( "%d%d%d" , &x , &y , &z ) ;
        add_edge ( x , y , z ) ;
    }
    for ( int i = 1 ; i <= n ; i ++ ) 
        dis[i] = MAXSM ;
    vis[s] = 1 , q[1] = 1 ;
    dis[s] = 0 , l = r = 1 ;
    while ( l <= r ) {
        int now = q[ l ++ ] ;
        for ( int i = head[now] ; i ; i = e[i].next ) {
            int nx = e[i].y ;
            if ( dis[nx] >= dis[now] + e[i].z ) {
                dis[nx] = dis[now] + e[i].z ;
                if ( !vis[nx] ) {
                    vis[nx] = 1 ;
                    q[ ++r ] = nx ; 
                }
            }
        }
        vis[now] = 0 ;
    }
    for ( int i = 1 ; i <= n ; i ++ ) {
        if ( s == i ) 
            std :: printf ( "0 ") ;
        else std :: printf ( "%d " , dis[i] ) ;
    }
    return 0 ;
}

回复

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

正在加载回复...