饥荒:进阶·放火烧树

描述

 

饥荒:放火烧树是一个奥妙重重的游戏。TanYz是饥荒的老司机,为了得到木炭点火,不得不放火烧树。

老司机TanYz为了生存,还要节约资源。他知道一次只能将一棵树木点燃。而且,当一棵树被点燃后,与这棵树距离不超过k的所有树木都会被点燃。

自从TanYz把这个奥妙重重的游戏安利给萌新zhuyutian后,他觉得放火烧山这种粗活太没意思。于是他把这个任务交给了zhuyutian。于是,zhuyutian想把把数木种成了一排。TanYz立即怼了他一发,觉得这样收集很麻烦。于是zhuyutian只好把数木尽量种得密集一些。

你的任务是,计算至少点燃多少棵树才能把所有树木烧光。

输入

 

输入第一行一个整数T(T <= 100)。表示数据组数。接下来T组数据。每组第一行两个整数n,k(1 <= n <= 1000,0<=k<=1000000000)。表示已知树木的数量和两棵树能互相点燃的最大距离。接下来n行,每行两个整数x,y(-10^9 <= x,y <= 10^9),表示每棵树的位置坐标。

输出

 

每组输出一行表示答案。

输入样例 1 

2
3 3
0 0
1 1
3 4
5 654930830
-251710640 -145578788
-694509186 121100885
297804621 -137615906
602751213 267025508
559395834 -643403625

输出样例 1

2
1

这题是去年校赛的题,把当时只会做水题(现在也只会做水题)的我难住了,正好这段时间在做相关的题目就顺手做了一下。

我们可以发现,当若干棵树可以烧到彼此的时候,烧其中的哪棵都是一样的。把树作为顶点,连通关系定义为能否被烧到,问题就可以化为求无向图的连通分量个数,那也不用多说,一遍dfs搞定。

值得一提的是我一开始用邻接矩阵储存图t了,虽然不会链式前向星至少也要用vector储存邻接表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值