题目链接:http://acm.fzu.edu.cn/problem.php?pid=2150
题意:
给定一个平面图 . 为空地(不着火) # 为草
开始可以选1-2个草堆点燃,每隔一秒会把上下左右的草引燃(开始时间为0秒)
问把所有草烧光的最少时间
给定的图中必有草
思路:
纯暴力的话复杂度是 n^8 TLE
我们可以先处理出2个数组
d数组 表示任意点间距离
go[i][j] 表示 在 (i ,j) 所在的联通块 中里 (i ,j) 最远的草的距离
预处理时间为n^4
对于题目中的草其实可以分为
联通块>2 (显然是烧不完的 , ans = -1)
联通块 == 2 ( 每个联通块都要一个火把点燃, 而每个联通块最长时间则是 go[ 该联通块的点 ] , 取个两联通块需要的最长时间即可 复杂度为n^2)
联通块 == 1 ( 我们设 a, b为起点 ,则对于图中的草c,被点燃的时间就是 min(d[a][c], d[b][c]) ,则暴力一下所有草就得到 ab为起点的时间,暴力一下ab就得到正解
复杂度为n^6
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h&g