FOJ 2150 在二维草地上点火烧完所有草最少时间 BFS+图论+容斥

该博客探讨了一道编程竞赛题目,涉及在二维平面上点燃草堆的问题。题目要求求解将所有草烧完的最短时间。通过BFS和图论的方法,可以预处理距离矩阵和联通块信息,从而解决复杂度问题。对于不同联通块数量的情况,博主给出了不同的解决方案和时间复杂度分析。
摘要由CSDN通过智能技术生成

题目链接: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值