Dij ,56分, 2WA ,2TLE
查看原帖
Dij ,56分, 2WA ,2TLE
774204
A_chicken_boy楼主2023/8/7 16:08
#include <bits/stdc++.h>
using namespace std ;
#define leng 50001
priority_queue< pair< int ,int > > q;
int tot , head[leng] , ver[leng] , dis[leng] , edge[leng] ;
int d[leng] , p[leng] ;
int pg ;
int n ;
void pd ( int x ) ;
void add ( int x , int y , int z ) ;
void Dij ( ) ;
int main ( ){
	int m ;
	cin >> n >> m ;
	for ( int i = 1 ; i <= m ; ++i ){
		int u , v , w ;
		cin  >> u >> v >> w ;
		add ( u , v , w );
	}
	pd ( 1 ) ;
	if ( pg == 0 ) {
		cout << -1 ;return 0 ;
	}
	Dij ( ) ;
	cout << d[n] ;
	return 0 ;
}
void add( int x , int y , int z ){
	edge[++tot] = head[x] ;	
	head[x] = tot ;
	ver[tot] = y ;
	dis[tot] = z ;
}
void Dij ( ) {	
	d[1] = 0 ;
	q.push(make_pair(0,1));
	while ( q.size( ) ){
		int x = q.top( ).second;
		q.pop( ) ;
		if (p[x])  continue ;
		p[x] = 1 ;
		for ( int i = head[x] ; i ; i = edge[i] ){
			int y = ver[i] , z = dis[i] ;
			if ( d[y] < d[x] + z ){
				d[y] = d[x] + z ;
				q.push(make_pair(d[y],y));
			}
		}
	}
}
void pd ( int x ){
	for ( int i = head[x] ; i ; i = edge[i] ){
		int y = ver[i] ;
		if ( y == n ){pg = 1 ;	break ;}
		pd( y ) ;
	}
}
2023/8/7 16:08
加载中...