hdu 3832 Earth Hour

时间:2023-03-09 23:53:51
hdu 3832 Earth Hour

http://acm.hdu.edu.cn/showproblem.php?pid=3832

 #include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#define maxn 1001
using namespace std;
const int inf=<<; int g[maxn][maxn];
bool vis[maxn];
int dis1[maxn],dis2[maxn],dis3[maxn];
int n;
struct node
{
int x,y,r;
}p[maxn];
int sqr(int x)
{
return x*x;
} void spfa(int src,int dis[])
{
queue<int>q;
memset(vis,false,sizeof(vis));
for(int i=; i<=n; i++) dis[i]=inf;
dis[src]=;
vis[src]=true;
q.push(src);
while(!q.empty())
{
int u=q.front(); q.pop();
vis[u]=false;
for(int i=; i<n; i++)
{
if(dis[i]>dis[u]+g[u][i]&&g[u][i]!=inf)
{
dis[i]=dis[u]+g[u][i];
if(!vis[i])
{
q.push(i);
vis[i]=true;
}
}
}
}
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(i==j) g[i][j]=;
else g[i][j]=inf;
}
}
for(int i=; i<n; i++)
{
cin>>p[i].x>>p[i].y>>p[i].r;
}
for(int i=; i<n; i++)
{
for(int j=i+; j<n; j++)
{
if(sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y))<=(p[i].r+p[j].r))
{
g[i][j]=g[j][i]=;
}
}
}
spfa(,dis1);
spfa(,dis2);
spfa(,dis3);
int min1=inf;
for(int i=; i<n; i++)
{
//printf("%d %d %d\n",dis1[i],dis2[i],dis3[i]);
min1=min(min1,dis1[i]+dis2[i]+dis3[i]);
}
if(min1==inf) printf("-1\n");
else printf("%d\n",n-min1-);
}
return ;
}