性感代码求调
查看原帖
性感代码求调
945742
hexuchen楼主2024/8/12 10:28
#include <bits/stdc++.h>
#define int long long
using namespace std;
int read(){
	int sum=0,a=1;
	char c=getchar();
	while(c<'0' || c>'9'){
		if(c=='-'){
			a=-1;
		}
		c=getchar();
	}
	while(c>='0' && c<='9'){
		sum=sum*10+c-'0';
		c=getchar();
	}
	return sum*a;
}
void write(int a){
	if(a<0){
		a*=-1;
		putchar('-');
	}
	if(a>9)
		write(a/10);
	putchar(a%10+'0');
}
int start,en,n,m,x[1001],y[1001],c[1001],s[1001][1001],p[1001],ans[1001];
void Dijkstra(){
	p[start]=true;
	for(int i=1;i<=m;i++){
		ans[i]=s[start][i];
	}
	for(int i=1;i<m;i++){
		int minn=2147483648,a=-1;
		for(int j=1;j<=m;j++){
			if(!p[j] && ans[j]<=minn){
				minn=ans[j];
				a=j;
			}
		}
		if(a==-1)
			break;
		p[a]=true;
		for(int j=1;j<=m;j++){
			ans[j]=min(ans[j],ans[a]+s[a][j]);
		}
	}
}
signed main(){
	n=read();
	m=read();
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			s[i][j]=2147483648;
		}
	}
	bool flag=true;
	for(int i=1;i<=m;i++){
		x[i]=read();
		y[i]=read();
		c[i]=read();
		if(x[i]==1 && y[i]==1){
			start=i;
		}
		else if(x[i]==n && y[i]==n){
			flag=false;
			en=i;
		}
	}
	if(flag){
		en=m+1;
		x[m+1]=n;
		y[m+1]=n;
	}
	for(int i=1;i<m;i++){
		for(int j=i+1;j<=m;j++){
			if(abs(x[i]-x[j])+abs(y[i]-y[j])==1){
				s[i][j]=abs(c[i]-c[j]);
				s[j][i]=abs(c[i]-c[j]);
			}
			else if(abs(x[i]-x[j])+abs(y[i]-y[j])==2){
				s[i][j]=2+abs(c[i]-c[j]);
				s[j][i]=2+abs(c[i]-c[j]);
			}
		}
	}
	if(flag){
		for(int i=1;i<=m;i++){
			if(abs(x[i]-x[en])+abs(y[i]-y[en])==1){
				s[i][en]=2;
				s[en][i]=2;
			}
		}
		m++;
	}
	Dijkstra();
	write(ans[en]==2147483648?-1:ans[en]);
	return 0;
}
2024/8/12 10:28
加载中...