题意:
在一张图中,有n个点,要建几个服务站,服务站可以服务离他距离为k的点;一开始只有一个服务站;
现在给出有几组样例,每组样例给出有n个点,最开始的服务站位置start,还有服务站的服务距离dis:
思路:
首先我们要以最开始的服务站为根,先建一棵树.那么深度为dis的结点就全都可以访问到了;
那么哪些结点最有可能访问不到?就是深度最深的;
所以我们建好树后,把节点按照从大到小排序,然后访问,如果这个节点没被服务到,就从这个节点往上找dis的距离,把那个点建服务站'
AC:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1005;
int u[N * 2],v[N * 2],nex[N * 2],first[N * 2],e;
int n,start,dis,ans,vis[N];
int num,fa[N];
struct treenode {
int id;
int deep;
}node[N];
int cmp(treenode a , treenode b) {
return a.deep &g