RE求助
  • 板块P2009 跑步
  • 楼主Vicssia
  • 当前回复11
  • 已保存回复11
  • 发布时间2019/4/11 13:18
  • 上次更新2025/6/18 21:16:10
查看原帖
RE求助
78708
Vicssia楼主2019/4/11 13:18

floyd RE 全部

#include<bits/stdc++.h>
using namespace std;

int n,k;
int be,end;
int f[505][505];

int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}

void in()
{
	memset(f,0x3f,sizeof(f));
	int x;
	n=read();k=read();
	for(int i=1;i<=n;++i)
	{
		x=read();
		if(i<n)
		{
			f[i][i+1]=x;
			f[i+1][i]=x;
		}
		if(i==n)
		{
			f[i][1]=x;
			f[1][i]=x;
		}
	}
	
	char a,b;
	int c,d,e;
	for(int i=1;i<=k;++i)
	{
		scanf("%c %c",&a,&b);
		e=read();
		c=a-'A'+1;
		d=b-'A'+1;
		//printf("%d %d\n",c,d);
		if(f[c][d]!=0x7f)
		{
			if(e>f[c][d])
			{
				f[c][d]=e;
				f[d][c]=e;
			}
		}
		else
		{
			f[c][d]=e;
			f[d][c]=e;
		}
	}
	/*for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)
		printf("%d ",f[i][j]);
		printf("\n");
	}*/
}

void floyd()
{
	for(int k=1;k<=n;++k)
	{
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=n;++j)
			{
				if(f[i][j]>f[i][k]+f[k][j])
				f[i][j]=f[i][k]+f[k][j];
			}
		}
	}
}

void work()
{
	char u,v;
	scanf("%c %c",&u,&v);
	floyd();
	//printf("%d %d\n",u-16-'0',v-16-'0');
	printf("%d",f[u-'A'+1][v-'A'+1]);
}

int main()
{
	in();
	work();
	return 0;
}
2019/4/11 13:18
加载中...