66分,Dijkstra
查看原帖
66分,Dijkstra
774204
A_chicken_boy楼主2023/8/3 16:24
#include <bits/stdc++.h>
using namespace std ;
#define leng 400
int n ;
int head[leng] , mnext[leng] , tot , ver[leng] , dis[leng] ;
priority_queue< pair< int ,int > > q;
int d[leng] , p[leng] ;
void add ( int , int , int ) ;
void Dij ( ) ;
int main ( ){
	cin >> n ;
	for ( int i = 1 ; i <= n ; ++i ){
			d[i] = 2147483647 ;
	}
	for ( int i = 1 ; i < n ; ++i ){
		for ( int j = i + 1 ; j <= n ; ++j ){
			int x ;
			cin >> x ;
			add( i , j , x ) ;
		}
	}
	Dij( );
	cout << d[n] ;
	return 0;
}
void add ( int x , int y , int z ){
	mnext[++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 = mnext[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));
			}
		}
	}
}
2023/8/3 16:24
加载中...