Submission #1193820

#TimeUsernameProblemLanguageResultExecution timeMemory
1193820empaktusTracks in the Snow (BOI13_tracks)C++20
59.38 / 100
1768 ms820328 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; typedef long long ll; typedef long double ld; void cas(){ int n,m; cin>>n>>m; vector<string>board(n); for(int i=0;i<n;i++){ cin>>board[i]; } vector<vector<int>>col(n,vector<int>(m,-1)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(col[i][j]!=-1){ continue; } if(board[i][j]=='.'){ continue; } col[i][j]=i*n+j; queue<pair<int,int>>q; q.push({i,j}); while(!q.empty()){ pair<int,int> v=q.front(); q.pop(); vector<pair<int,int>>delta={{1,0},{0,1},{-1,0},{0,-1}}; //for(int x:adj[v.first][v.second]){ for(auto [dx,dy]:delta){ pair<int,int>x={v.first+dx,v.second+dy}; if(x.first>=0&&x.first<n&&x.second>=0&&x.second<m){ if(board[x.first][x.second]==board[v.first][v.second]){ if(col[x.first][x.second]==-1){ q.push(x); col[x.first][x.second]=col[v.first][v.second]; } } } } } } } /*for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout<<col[i][j]<<" "; } cout<<"\n"; }*/ vector<vector<int>>adj(n*m); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ vector<pair<int,int>>delta={{1,0},{0,1},{-1,0},{0,-1}}; for(auto [dx,dy]:delta){ pair<int,int>x={i+dx,j+dy}; if(x.first>=0&&x.first<n&&x.second>=0&&x.second<m){ if(col[i][j]!=-1&&col[x.first][x.second]!=-1){ adj[col[i][j]].push_back(col[x.first][x.second]); } } } } } vector<int>dist(n*m,-1); dist[0]=0; queue<int>q; q.push(0); while(!q.empty()){ int v=q.front(); q.pop(); for(int x:adj[v]){ if(dist[x]==-1){ q.push(x); dist[x]=dist[v]+1; } } } int ans=0; for(int i=0;i<n*m;i++){ ans=max(ans,dist[i]); } cout<<ans+1<<"\n"; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cas(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...