这题标答应该是生成树
但是可以用普通dfs水过,总时间四秒多……
#include <bits/stdc++.h>
using namespace std;
int M,N,mky[505],ans,b[1005],vis;
struct node{
int x,y;
}tr[1005];
vector <int> G[1005];
float jump[1005][1005];
void input(){
cin >> M;
for (int i = 1;i <= M;i++) cin >> mky[i];
cin >> N;
for (int i = 1;i <= N;i++) cin >> tr[i].x >> tr[i].y;
}
float dist(int x1,int y1,int x2,int y2){
int dx = abs(x1 - x2),dy = abs(y1 - y2);
float res = sqrt(dx * dx + dy * dy);
return res;
}
void Graph(node tr[]){
for (int i = 1;i <= N;i++){
for (int j = 1;j <= N;j++){
if (i == j) continue;
G[i].push_back(j),G[j].push_back(i);
float w = dist(tr[i].x,tr[i].y,tr[j].x,tr[j].y);
jump[i][j] = jump[j][i] = w;
}
}
}
void init(){
memset(b,0,sizeof(b));
vis = b[1] = 1;
}
void dfs(int idx,int can){
for (int j = 0;j < G[idx].size();j++){
int tx = G[idx][j];
if (!b[tx] && can >= jump[idx][tx]){
b[tx] = 1;
vis++;
dfs(tx,can);
}
}
}
void solve(){
Graph(tr);
for (int i = 1;i <= M;i++){
init();
dfs(1,mky[i]);
if (vis == N) ans++;
}
}
void output(){
cout << ans;
}
int main(){
input();
solve();
output();
return 0;
}