记录编号 106703 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [USACO Oct08] 被破坏的电力系统 最终得分 100
用户昵称 Gravatarraywzy 是否通过 通过
代码语言 C++ 运行时间 0.241 s
提交时间 2014-06-18 14:18:23 内存使用 8.93 MiB
显示代码纯文本
#include<fstream>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
ifstream fin("pwrfail.in");
ofstream fout("pwrfail.out");
const double INF=999999999.0;
queue<int> q;
class woca
{
public:
	long long x;
	long long y;
}M[1001];
double map[1001][1001];
bool flag[1001][1001];
int n,m;
double X;
////////开始
double dist[1001];
bool BO[1001];//是否在队中
void SPFA(int a)
{
	int temp,i;
	q.push(a);
	dist[a]=0;
	BO[a]=1;
	while(!q.empty())
	{
		temp=q.front();
		q.pop();
		for(i=1;i<=n;i++)
		{
			if(dist[i]>dist[temp]+map[temp][i])
			{
				dist[i]=dist[temp]+map[temp][i];
				if(BO[i]==0)
				{
					q.push(i);
					BO[i]=1;
				}
			}
		}
		BO[temp]=0;
	}
}
int main()
{
	fin>>n>>m>>X;
	int i,j;
	memset(flag,0,sizeof(flag));
	int A,B,C,D,E,F;//最后的AB为终点坐标,CD为起点坐标
	for(i=1;i<=n;i++)
	{
		fin>>A>>B;
		if(i==1)
		{C=A;D=B;}
		M[i].x=A;M[i].y=B;
		dist[i]=INF;
	}
	for(i=1;i<=m;i++)
	{
		fin>>E>>F;
		flag[E][F]=1;
		flag[F][E]=1;
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			map[i][j]=INF;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			if(flag[i][j]==1)
				map[i][j]=0;
			else
				{
					map[i][j]=sqrt(double((M[i].x-M[j].x)*(M[i].x-M[j].x)+(M[i].y-M[j].y)*(M[i].y-M[j].y)));
					if(map[i][j]>X)
						map[i][j]=INF;
			    }
		}
	SPFA(1);
	if(dist[n]==INF)
	{
		fout<<-1<<endl;
		return 0;
	}
	fout<<int(dist[n]*1000)<<endl;
	return 0;
}