当前位置: 代码迷 >> 综合 >> CF920A Water The Garden (BFS水题)
  详细解决方案

CF920A Water The Garden (BFS水题)

热度:109   发布时间:2023-10-13 23:56:26.0

原题链接

题目

CF920A Water The Garden (BFS水题)

思路

直接 BFS 即可,把所有状态放进去,这里初始化了所有状态为 1 ,也就是说已经把自己本身给灌溉了,然后 BFS 扩展每个可以扩展的点放进去,能扩展就扩展,然后标记一下,左后取最大值即可,因为可以扩展时一定时间会变长,不可以扩展时,时间也不会变长了,所以直接取最大值,然后输出答案。

注意向左扩展时不能是负数。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 2500;
bool st[N];
int n, m;
struct name{
    int l, r, cnt;
};
int main()
{
    int t;cin >> t;while (t -- ){
    cin >> n >> m;queue<name> q;memset (st, 0, sizeof st);for (int i= 1; i <= m; i ++ ){
    int x;cin >> x;q.push({
    x, x, 1});st[x] = 1;}int ans = 0;while (!q.empty()){
    auto t = q.front();q.pop();ans = max(ans, t.cnt);int l = t.l, r = t.r, cnt = t.cnt;
// cout << l << " " << r << endl;if ((!st[l - 1] && l - 1 >= 1 )|| (!st[r + 1] && r + 1 <= n)){
    st[l - 1] = 1;st[r + 1] = 1;q.push({
    max(l - 1, 0), r + 1, cnt + 1});}}cout << ans << endl;}return 0;
}

总结

简单。