92分在#4RE 求大佬调代码(dijkstra)
查看原帖
92分在#4RE 求大佬调代码(dijkstra)
927751
zxz1226楼主2024/8/22 20:48
#include<iostream>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
const int N=5100;
int n,to[N],he[N],wh[N],ne[N],cnt;
int vis[N],a[N][N],d[N];
void add(int a,int b,int w){
	to[++cnt]=b,wh[cnt]=w,ne[cnt]=he[a],he[a]=cnt;
}
void dijkstra(){
	priority_queue< pair<int,int> > q;
	memset(d,0x3f,sizeof(d));
	d[1]=0;
	q.push({0,1});
	while(q.size()){
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=he[x];i;i=ne[i]){
			int k=to[i],w=wh[i];
			if(d[k]>d[x]+w){
				d[k]=d[x]+w;
				q.push({-d[k],k});
			}
		}
	}
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			scanf("%lld",&a[i][j]);
			add(i,j,a[i][j]);
//	        add(j,i,a[i][j]);
		}
	}
	dijkstra();
	printf("%lld",d[n]);
	return 0;
}
2024/8/22 20:48
加载中...