社区讨论
求解为什么全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 条回复,欢迎继续交流。
正在加载回复...