Submission #1063720

#TimeUsernameProblemLanguageResultExecution timeMemory
1063720danielzhuTracks in the Snow (BOI13_tracks)C++17
95.63 / 100
1957 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; int H, W; int grid[4001][4001], cc[4001][4001]; queue<pair<int,int>> q; vector<pair<int,int>> dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; void ff(int cur, int val){ while(!q.empty()){ auto temp = q.front(); int x = temp.first, y = temp.second; q.pop(); for(auto [dx, dy] : dir){ if((x+dx > -1)&& (x+dx < H) && (y+dy > -1) && (y+dy < W) && (cc[x+dx][y+dy] == -1) && (grid[x+dx][y+dy] == cur)){ cc[x+dx][y+dy] = val; q.push({x+dx, y+dy}); } } } } int main(){ cin>>H>>W; memset(grid, 0, sizeof(grid)); memset(cc, -1, sizeof(cc)); for(int i = 0; i < H; i++){ string s; cin>>s; for(int j = 0; j < W; j++){ if(s[j] == 'F') grid[i][j] = 1; else if(s[j] == 'R') grid[i][j] = 2; } } int val = 0; for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ if(cc[i][j] == -1 && grid[i][j] != 0){ cc[i][j] = val; q.push({i,j}); ff(grid[i][j], val); val++; } } } vector<unordered_set<int>> adj(val+1); for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ if(grid[i][j] != 0){ for(auto [dx, dy] : dir){ if(i+dx > -1 && i+dx < H && j+dy > -1 && j+dy < W && grid[i+dx][j+dy] != grid[i][j] && grid[i+dx][j+dy] != 0){ adj[cc[i][j]].insert(cc[i+dx][j+dy]); adj[cc[i+dx][j+dy]].insert(cc[i][j]); } } } } } queue<int> q1; q1.push(0); vector<int> v(val+1, 0), d(val+1, 0); v[0] = 1; int ans = 0; while(!q1.empty()){ auto temp = q1.front(); q1.pop(); for(auto i : adj[temp]){ if(!v[i]){ q1.push(i); v[i] = 1; d[i] = d[temp] + 1; ans = max(ans, d[i]); } } } cout<<ans+1<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...