题目
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
double G[][], sum;
const double pi = acos(-);
const int INF = (<<);
struct node
{
double x, y; //x是经度, y是纬度。
}p[];
double angle(double lng1, double lat1, double lng2, double lat2)
{
double dlng = fabs(lng1-lng2)*pi/;
while(dlng >= pi+pi)
dlng -= (pi+pi);
if(dlng > pi)
dlng = pi+pi-dlng;
lat1 *= pi/;
lat2 *= pi/;
return acos(cos(lat1)*cos(lat2)*cos(dlng)+sin(lat1)*sin(lat2));
}
double sphere_dist(double r, double lng1, double lat1, double lng2, double lat2)
{
return r*angle(lng1, lat1, lng2, lat2);
}
void prime(int n)
{
int i, j, pos;
int Min, vis[];
double d[];
memset(vis, , sizeof(vis));
memset(d, , sizeof(d));
for(i = ; i <= n; i++)
d[i] = G[][i];
vis[] = ;
for(i = ; i <= n; i++)
{
Min = INF;
for(j = ; j <= n; j++)
{
if(!vis[j] && Min>d[j])
{
Min = d[j];
pos = j;
}
}
sum += Min;
vis[pos] = ;
for(j = ; j <= n; j++)
{
if(!vis[j])
{
if(d[j] > G[pos][j])
d[j] = G[pos][j];
}
}
}
}
int main()
{
int n, t, c, i, j;
double d, l, r;
cin>>t;
while(t--)
{
sum = ;
cin>>d>>l>>c;
r = d/*1.0;
n = c;
for(i = ; i <= n; i++)
{
for(j = ; j <= n; j++)
G[i][j] = INF;
G[i][i] = ;
}
for(i = ; i <= n; i++)
cin>>p[i].x>>p[i].y;
for(i = ; i <= n; i++)
for(j = i+; j <= n; j++)
{
G[i][j] = sphere_dist(r, p[i].y, p[i].x, p[j].y, p[j].x);
G[j][i] = G[i][j];
}
prime(n);
if(sum - l> )
cout<<"N"<<endl;
else
cout<<"Y"<<endl;
}
return ;
}