提交时间:2024-03-02 09:24:31

运行 ID: 133799

#include <bits/stdc++.h> using namespace std; const int N = 500 + 5; int n, m; int ans = 0, cnt = 0; int grid[N][N], vis[N][N]; int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; void dfs(int x, int y) { if (x < 1 || y < 1 || x > n || y > m) return; if (vis[x][y]) return; vis[x][y] = 1; for (int i=0; i<4; i++) { int tx = x+dx[i], ty = y+dy[i]; if (grid[tx][ty] < grid[x][y]) dfs(tx, ty); } } signed main() { scanf("%d%d", &n, &m); for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) scanf("%d", &grid[i][j]); for (int i=1; i<=m; i++) { int mx = max_element(grid[1]+1, grid[1]+1+m)-grid[1]; if (!vis[1][mx]) { ans++; dfs(1, mx); } grid[1][mx] = INT_MIN; } for (int i=1; i<=m; i++) { if (vis[n][i]) cnt++; } if (cnt != m) { printf("0\n%d", m-cnt); } else printf("1\n%d", ans); return 0; }