[HDU 5934]Bomb
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5934 题面 题意 题目是说有 N N N 个炸弹,每个炸弹有其对应的坐标( x i x_i x i , y i y_i y i )、爆炸半径 r i r_i r i 以及引爆其所需的费用 c o s t i cost_i c o s t i ,当一个炸弹爆炸时在其爆炸半径内其它未爆炸的炸弹也会爆炸。问使所有炸弹爆炸的最小费用是多少。 思路 显然我们可以把炸弹之间的引爆关系看成有向边(因为存在爆炸半径,所以A可以引爆B不一定B可以引爆A)把炸弹看成图中的点,问题就转化成了,图中有 N N N 个点以及若干条有向边,选取第 i i i 个点的费用是 c i c_i c i ,问选取若干个点使得图中每个点都可到达所需的最小费用是多少? 有向图中可能存在强连通分量,考虑每个强连通分量的最小代价必然是强连通分量中代价最小的点,我们可以将每个强连通分量用其中代价最小的点代替,再重新建图,这时若存在A指向B的关系,显然B就可以不用选了。 故完整算法就是: 读入所有点的数据,暴力建图 找强连通分量,把所有强连通分量的代价用其中代价最小的点代替 重新建图 找出所有入度为0的点,把代价加起来即得答案。 顺便吐槽一下HDOJ越界了居然返回TLE AC代码 # include <stdio