uva1267(无根树 +dfs)

这是一道关于图论的问题,需要确定在一个包含n个点的图中,如何设置服务站以覆盖到最远的点。初始有一个服务站,每增加一个服务站能覆盖距离为k的点。解决方案是构建以初始服务站为根的树,并以深度优先搜索(DFS)策略检查并添加新的服务站,确保所有深度最深的节点都能被覆盖。
摘要由CSDN通过智能技术生成

题意:

在一张图中,有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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值