为什么我把INF换成9999999就过了?
查看原帖
为什么我把INF换成9999999就过了?
194790
祸榊__楼主2020/12/12 11:45
#include<cstdio>
#include<iostream>
using namespace std;
#define re register
#define li(i,j,k) for(int i=j ; i<=k ; i++)
#define si(i,j,k) for(int i=j ; i>=k ; i--)
#define ll long long
const int INF=2147483647;
int n,m;
int dis[1001][1001];
inline int read(){
	re int x=0;re int f=1;
	char ch=getchar();
	while(ch<'0' || ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9'){
		x=(x<<3)+(x<<1)+ch-'0';
		ch=getchar();
	}
	return x;
}
int min(int a,int b){
	return a<b?a:b;
}
int main(){
	scanf("%d%d",&n,&m);
	for(re int i=1 ; i<=n ; i++){
		for(re int j=1 ; j<=n ; j++){
			dis[i][j]=INF;
		}
	}
	for(re int i=1 ; i<=m ; i++){
		re int u,v,w;
		u=read(),v=read(),w=read();
		dis[u][v]=min(dis[u][v],w);
	}
	for(re int k=1 ; k<=n ; k++){
		for(re int i=1 ; i<=n ; i++){
			for(re int j=1 ; j<=n ; j++){
				dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
			}
		}
	}
	re int ans=0;
	for(re int i=2 ; i<=n ; i++){
		ans+=dis[1][i]+dis[i][1];
	}
	printf("%d\n",ans);
	return 0;
}

(不要注意到我开了O2)

2020/12/12 11:45
加载中...