Submission #1109844

#TimeUsernameProblemLanguageResultExecution timeMemory
1109844raspyTracks in the Snow (BOI13_tracks)C++17
23.02 / 100
2109 ms1048576 KiB
#include <bits/stdc++.h> // #define int long long #define vi vector<int> #define ii pair<int, int> #define f first #define s second #define all(x) (x).begin(), (x).end() #define P 31 #define mod 1'000'000'007 #define inf 1'000'000'000'000 #define pb push_back #define str string #define sz(x) (x).size() #define vvi vector<vi> #define fun function #define oopt cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false); #define file freopen("problemname.in", "r", stdin); freopen("pr.out", "w", stdout); #define dbg(v) cout << "Line(" << __LINE__ << ") -> " << #v << " = " << (v) << endl; using namespace std; template <class T, int SZ> using arr = array<T, SZ>; int p[16000005]; int a[4001][4001]; bool ob[16000005]; set<int> pov[16000005]; int par(int x) {return p[x] = (p[x] == x ? x : par(p[x]));}; void zd(int x, int y) { x = par(x); y = par(y); if (x == y) return; if (pov[x].size() < pov[y].size()) swap(x, y); for (int v : pov[y]) pov[x].insert(v); pov[y].clear(); p[y] = x; } int dfs(int u, int p = -1) { // cout << u << " <- " << p << "\n"; int rez = 0; for (int v : pov[u]) if (v != p) rez = max(rez, dfs(v, u)); return rez+1; } vector<ii> pr = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; signed main() { oopt; int n, m; cin >> n >> m; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { char c; cin >> c; if (c == 'F') a[i][j] = 1; else if (c == 'R') a[i][j] = 2; p[i*m+j] = i*m+j; } queue<ii> q; q.push({0, 0}); while (q.size()) { ii t = q.front(); q.pop(); int i = t.f, j = t.s; int x = i*m+j, y = 0; for (ii d : pr) { int ni = i+d.f, nj = j+d.s; y = ni*m+nj; if (ni < 0 || nj < 0 || ni > n || nj > m || ob[par(y)] || a[ni][nj] == 0) continue; if (a[ni][nj] != a[i][j]) continue; zd(x, y); ob[par(y)] = 1; q.push({ni, nj}); } for (ii d : pr) { int ni = i+d.f, nj = j+d.s; y = ni*m+nj; if (ni < 0 || nj < 0 || ni > n || nj > m || ob[par(y)] || a[ni][nj] == 0) continue; ob[par(y)] = 1; // cout << par(x) << " " << par(y) << "t\n"; pov[par(x)].insert(par(y)); pov[par(y)].insert(par(x)); q.push({ni, nj}); } } cout << dfs(0) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...