Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <string>
- #include <sstream>
- #include <queue>
- #include <ext/pb_ds/hash_policy.hpp>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- typedef long long ll;
- namespace pbds{
- using namespace __gnu_pbds;
- template <class T, class cmp = std::less<T>>
- using set = tree<T, null_type, cmp, rb_tree_tag, tree_order_statistics_node_update>;
- template <class key, class value, class cmp = std::less<key>>
- using map = tree<key, value, cmp, rb_tree_tag, tree_order_statistics_node_update>;
- }
- int n, m, k;
- const int inf = 10005;
- template <class VVP, class QP>
- void bfs(int n, int m, VVP& g, QP& q) {
- vector<vector<char>> used(n, vector<char>(m));
- while(!q.empty()) {
- pair<int,int> v = q.front(); q.pop();
- int x = v.first, y = v.second;
- if (used[x][y]) continue;
- used[x][y] = 1;
- int dx[4] = {-1, 0, 1, 0};
- int dy[4] = {0, 1, 0, -1};
- for(int i = 0; i < 4; i++) {
- int nx = x + dx[i], ny = y + dy[i];
- if (nx < 0 || nx >= n || ny < 0 || ny >= m || g[nx][ny] <= g[x][y] + 1) continue;
- g[nx][ny] = 1 + g[x][y];
- q.push({nx, ny});
- }
- }
- }
- int main() {
- cin >> n >> m >> k;
- vector<vector<int>> g(n, vector<int>(m, inf));
- queue<pair<int, int>> q;
- for (int i = 0; i < k; i++) {
- int x, y;
- cin >> x >> y;
- q.push({x, y});
- g[x][y] = 0;
- }
- bfs(n, m, g, q);
- int ans = 0;
- for(int i = 0; i < n; i++)
- for (int j = 0; j < m; ++j)
- if(g[i][j] > ans)
- ans = g[i][j];
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement