社区讨论

80求调,RE on #9 #10

P1434[SHOI2002] 滑雪参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhj3grie
此快照首次捕获于
2025/11/03 20:06
4 个月前
此快照最后确认于
2025/11/03 20:06
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N = 2e3 + 5;
int in[N], rc[N][N];
int maxn, r, c;
vector<int> G[N];
queue<pair<int, int>> q;
int main()
{
    scanf("%d%d", &r, &c);
    memset(rc, 0x3f, sizeof rc);
    for (int i = 1; i <= r; i++)
    {
        for (int j = 1; j <= c; j++)
        {
            scanf("%d", &rc[i][j]);
        }
    }
    for (int i = 1; i <= r; i++)
    {
        for (int j = 1; j <= c; j++)
        {
            if (rc[i][j] > rc[i - 1][j])
            {
                G[(i - 1) * c + j].push_back((i - 2) * c + j);
                in[(i - 2) * c + j]++;
            }
            if (rc[i][j] > rc[i + 1][j])
            {
                G[(i - 1) * c + j].push_back((i)*c + j);
                in[(i)*c + j]++;
            }
            if (rc[i][j] > rc[i][j - 1])
            {
                G[(i - 1) * c + j].push_back((i - 1) * c + j - 1);
                in[(i - 1) * c + j - 1]++;
            }
            if (rc[i][j] > rc[i][j + 1])
            {
                G[(i - 1) * c + j].push_back((i - 1) * c + j + 1);
                in[(i - 1) * c + j + 1]++;
            }
        }
    }
    for (int i = 1; i <= r * c; i++)
    {
        if (!in[i])
        {
            q.push({i, 0});
        }
    }
    while (!q.empty())
    {
        int u = q.front().first, step = q.front().second;
        maxn = max(maxn, step);
        q.pop();
        for (int i = 0; i < G[u].size(); i++)
        {
            int v = G[u][i];
            in[v]--;
            if (!in[v])
            {
                q.push({v, step + 1});
            }
        }
    }
    printf("%d", maxn + 1);
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...