이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
#define ff first
#define ss second
char S[2005][2005];
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
pii vis[2005][2005]; // sc, dist
queue<pair<pii, int> > q; // x, y, sc
int maxDist;
pii upa[200005];
int rnk[200005];
int fnd(int x, int c) { return upa[x].ss > c ? x : fnd(upa[x].ff, c); }
void uni(int x, int y, int c) {
x = fnd(x, c), y = fnd(y, c);
if (x == y) return;
if (rnk[x] < rnk[y]) swap(x, y);
upa[y] = pii(x, c);
if (rnk[x] == rnk[y]) ++rnk[x];
maxDist = max(maxDist, c);
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
int H, W, P, Q; cin >> H >> W >> P >> Q;
for (int i = 1; i <= H; ++i) cin >> S[i] + 1;
for (int i = 1; i <= P; ++i) {
int x, y; cin >> x >> y;
vis[x][y].ff = i;
q.emplace(pii(x, y), i);
upa[i] = pii(i, 1e9);
}
vector<pair<int, pii> > E;
while (q.size()) {
auto cur = q.front(); q.pop();
int x = cur.ff.ff, y = cur.ff.ss;
int sc = cur.ss, dist = vis[x][y].ss;
for (int i = 0; i < 4; ++i) {
int nx = x + dx[i], ny = y + dy[i];
if (nx < 1 || nx > H || ny < 1 || ny > W || S[nx][ny] == '#') continue;
if (vis[nx][ny].ff) {
E.emplace_back(dist + vis[nx][ny].ss, pii(sc, vis[nx][ny].ff));
continue;
}
vis[nx][ny] = pii(sc, dist + 1);
q.emplace(pii(nx, ny), sc);
}
}
sort(E.begin(), E.end());
for (auto i : E) {
uni(i.ss.ff, i.ss.ss, i.ff);
}
for (int i = 0; i < Q; ++i) {
int x, y; cin >> x >> y;
if (fnd(x, maxDist) != fnd(y, maxDist)) {
cout << -1 << '\n';
continue;
}
int l = 0, r = maxDist;
while (l < r) {
int m = l + r >> 1;
if (fnd(x, m) == fnd(y, m)) r = m;
else l = m + 1;
}
cout << l << '\n';
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
bottle.cpp: In function 'int main()':
bottle.cpp:28:43: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
for (int i = 1; i <= H; ++i) cin >> S[i] + 1;
~~~~~^~~
bottle.cpp:68:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int m = l + r >> 1;
~~^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |