90分求助
  • 板块P2009 跑步
  • 楼主ggcggc
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/28 11:56
  • 上次更新2023/10/24 02:51:45
查看原帖
90分求助
712994
ggcggc楼主2023/1/28 11:56
#include<iostream>
#include<string.h>
#define ri register int
using namespace std;
const int MAX=0x3f3f3f3f;
char a,b;
int n,k,d[25],ma[25][25];
bool f[25];
inline void dijkstra(ri s,ri e){
	memset(d,0x3f,sizeof(d));
	d[s]=0;
	for(ri i=1;i<=n;i++){
		ri mi=-1;
		for(ri j=1;j<=n;j++){
			if(f[j]==false&&(mi==-1||d[j]<d[mi])){
				mi=j;
			}
		}
		f[mi]=true;
		for(ri j=1;j<=n;j++){
			if(f[j]==false&&ma[mi][j]!=0&&d[mi]+ma[mi][j]<d[j]){
				d[j]=d[mi]+ma[mi][j];
			}
		}
	}
	ri minn;
	if(s==e){
		for(ri i=1;i<=n;i++){
			if(d[i]!=0)
			minn=min(minn,d[i]);
		}
		cout<<minn*2<<endl;
	}else cout<<d[e]<<endl;
} 
int main(){
	std::ios::sync_with_stdio(false);std::cin.tie(NULL);
	cin>>n>>k;
	for(ri i=1;i<n;i++){
		cin>>ma[i][i+1];
		ma[i+1][i]=ma[i][i+1];
	}
	cin>>ma[1][n];
	ma[n][1]=ma[1][n];
	int x,y,len;
	for(ri i=1;i<=k;i++){
		cin>>a>>b>>len;
		x=int(a)-64,y=int(b)-64;
		if(ma[x][y]==0)ma[x][y]=ma[y][x]=len;
		else{
			if(ma[x][y]<len)ma[x][y]=ma[y][x]=len;
		}
	}
	
	cin>>a>>b;x=int(a)-64,y=int(b)-64;
	dijkstra(x,y);
	return 0;
}
2023/1/28 11:56
加载中...