// https://oj.uz/problem/view/BOI13_tracks
#include <cstdio>
#include <algorithm>
#include <functional>
#include <vector>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
typedef long long ll;
// n,m <= 4000
int h, w;
char s[4005][4005];
int c[4005][4005];
set<int> adj[16000005];
queue<pair<int,int>> q;
void floodfill(int i, int j, char t, int co) {
q.push({i,j});
while (!q.empty()) {
tie(i, j) = q.front();
q.pop();
if (i < 0 || i >= h || j < 0 || j >= w || c[i][j]) continue;
if (s[i][j] != t) continue;
c[i][j] = co;
q.push({i+1,j});
q.push({i-1,j});
q.push({i,j+1});
q.push({i,j-1});
}
}
void link(int i, int j, int p, int q) {
if (p < 0 || p >= h || q < 0 || q >= w) return;
if (s[i][j] == '.' || s[p][q] == '.') return;
int c1 = c[i][j], c2 = c[p][q];
if (c1 == c2) return;
adj[c1].insert(c2);
adj[c2].insert(c1);
}
queue<pair<int,int>> Q;
vector<int> d;
int main() {
scanf("%d %d", &h, &w);
for (int i = 0; i < h; i++)
scanf("%s", s[i]);
int co = 1;
// floodfill
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++) {
if (s[i][j] != '.' && c[i][j] == 0) {
floodfill(i, j, s[i][j], co++);
}
}
// link the nodes
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++) {
link(i,j,i+1,j);
link(i,j,i-1,j);
link(i,j,i,j+1);
link(i,j,i,j-1);
}
// bfs to find depth from (1,1)
Q.push({c[0][0],1});
d.resize(co);
for (int i = 0; i < co; i++)
d[i] = 0;
int ans = 0;
while (!Q.empty()) {
int u = Q.front().first;
int dep = Q.front().second;
Q.pop();
if (d[u]) continue;
d[u] = dep;
ans = max(ans, dep);
for (int v: adj[u]) {
Q.push({v, dep+1});
}
}
printf("%d", ans);
return 0;
}
Compilation message
tracks.cpp: In function 'int main()':
tracks.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
48 | scanf("%d %d", &h, &w);
| ~~~~~^~~~~~~~~~~~~~~~~
tracks.cpp:50:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
50 | scanf("%s", s[i]);
| ~~~~~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
409 ms |
762168 KB |
Output is correct |
2 |
Correct |
348 ms |
751872 KB |
Output is correct |
3 |
Correct |
329 ms |
752092 KB |
Output is correct |
4 |
Correct |
332 ms |
756680 KB |
Output is correct |
5 |
Correct |
325 ms |
755448 KB |
Output is correct |
6 |
Correct |
316 ms |
751892 KB |
Output is correct |
7 |
Correct |
320 ms |
752292 KB |
Output is correct |
8 |
Correct |
316 ms |
752276 KB |
Output is correct |
9 |
Correct |
320 ms |
752756 KB |
Output is correct |
10 |
Correct |
329 ms |
754800 KB |
Output is correct |
11 |
Correct |
326 ms |
753628 KB |
Output is correct |
12 |
Correct |
337 ms |
756392 KB |
Output is correct |
13 |
Correct |
321 ms |
755184 KB |
Output is correct |
14 |
Correct |
328 ms |
755264 KB |
Output is correct |
15 |
Correct |
354 ms |
761488 KB |
Output is correct |
16 |
Correct |
369 ms |
762128 KB |
Output is correct |
17 |
Correct |
343 ms |
760996 KB |
Output is correct |
18 |
Correct |
363 ms |
756816 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
331 ms |
782768 KB |
Output is correct |
2 |
Correct |
473 ms |
789156 KB |
Output is correct |
3 |
Correct |
1276 ms |
973348 KB |
Output is correct |
4 |
Correct |
524 ms |
811448 KB |
Output is correct |
5 |
Runtime error |
942 ms |
1048576 KB |
Execution killed with signal 9 |
6 |
Execution timed out |
2137 ms |
880476 KB |
Time limit exceeded |
7 |
Correct |
391 ms |
784036 KB |
Output is correct |
8 |
Correct |
403 ms |
782740 KB |
Output is correct |
9 |
Correct |
370 ms |
752776 KB |
Output is correct |
10 |
Correct |
381 ms |
752124 KB |
Output is correct |
11 |
Correct |
350 ms |
783308 KB |
Output is correct |
12 |
Correct |
373 ms |
754060 KB |
Output is correct |
13 |
Correct |
501 ms |
789216 KB |
Output is correct |
14 |
Correct |
423 ms |
775016 KB |
Output is correct |
15 |
Correct |
425 ms |
778500 KB |
Output is correct |
16 |
Correct |
403 ms |
768028 KB |
Output is correct |
17 |
Correct |
701 ms |
839196 KB |
Output is correct |
18 |
Correct |
618 ms |
841036 KB |
Output is correct |
19 |
Correct |
532 ms |
811468 KB |
Output is correct |
20 |
Correct |
527 ms |
812416 KB |
Output is correct |
21 |
Correct |
836 ms |
896432 KB |
Output is correct |
22 |
Runtime error |
936 ms |
1048576 KB |
Execution killed with signal 9 |
23 |
Correct |
1068 ms |
909364 KB |
Output is correct |
24 |
Correct |
901 ms |
947768 KB |
Output is correct |
25 |
Runtime error |
1187 ms |
1048576 KB |
Execution killed with signal 9 |
26 |
Correct |
1234 ms |
832372 KB |
Output is correct |
27 |
Correct |
1443 ms |
847484 KB |
Output is correct |
28 |
Execution timed out |
2086 ms |
890740 KB |
Time limit exceeded |
29 |
Execution timed out |
2139 ms |
880400 KB |
Time limit exceeded |
30 |
Correct |
1964 ms |
868284 KB |
Output is correct |
31 |
Execution timed out |
2071 ms |
994496 KB |
Time limit exceeded |
32 |
Correct |
1349 ms |
859724 KB |
Output is correct |