제출 #101484

#제출 시각아이디문제언어결과실행 시간메모리
101484jamielimTracks in the Snow (BOI13_tracks)C++14
20.83 / 100
2114 ms1049600 KiB
#include <bits/stdc++.h> using namespace std; set<int> adj[16000000]; vector<int> topo; int vis[16000000]; void dfs(int x){ if(vis[x])return; vis[x]=1; for(set<int>::iterator it=adj[x].begin();it!=adj[x].end();++it){ if(vis[(*it)])continue; dfs(*it); } topo.push_back(x); } int main(){ int h,w; scanf("%d%d",&h,&w); char grid[h+5][w+5]; for(int i=0;i<h;i++){ scanf("%s",grid[i]); } queue<pair<int,int> > q; int com[h][w]; memset(com,-1,sizeof(com)); int c=0; int dx[]={0,0,1,-1},dy[]={1,-1,0,0}; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(com[i][j]==-1){ q.push(make_pair(i,j)); com[i][j]=c; while(!q.empty()){ pair<int,int> cur=q.front();q.pop(); for(int k=0;k<4;k++){ int nx=cur.first+dx[k],ny=cur.second+dy[k]; if(nx<0||ny<0||nx>=h||ny>=w)continue; if(grid[nx][ny]==grid[cur.first][cur.second]&&com[nx][ny]==-1){ com[nx][ny]=c; q.push(make_pair(nx,ny)); } } } c++; } } } q.push(make_pair(0,0)); while(!q.empty()){ pair<int,int> cur=q.front();q.pop(); ///printf("%d %d\n",cur.first,cur.second); if(grid[cur.first][cur.second]=='~')continue; for(int i=0;i<4;i++){ int nx=cur.first+dx[i],ny=cur.second+dy[i]; if(0<=nx&&nx<h&&0<=ny&&ny<w){ if(grid[nx][ny]=='~')continue; if(grid[nx][ny]=='.'){ adj[com[cur.first][cur.second]].insert(com[nx][ny]); continue; } if(grid[nx][ny]==grid[cur.first][cur.second]){ q.push(make_pair(nx,ny)); continue; } ///printf("%d %d %d %d\n",cur.first,cur.second,nx,ny); adj[com[cur.first][cur.second]].insert(com[nx][ny]); q.push(make_pair(nx,ny)); } } grid[cur.first][cur.second]='~'; } dfs(0); reverse(topo.begin(),topo.end()); int dist[c]; memset(dist,-1,sizeof(dist)); dist[0]=0; for(int i=0;i<c;i++){ int x=topo[i]; for(set<int>::iterator it=adj[x].begin();it!=adj[x].end();++it){ dist[(*it)]=max(dist[(*it)],dist[x]+1); } } int ans=0; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ if(grid[i][j]=='.')ans=max(ans,dist[com[i][j]]); } } printf("%d",ans); }

컴파일 시 표준 에러 (stderr) 메시지

tracks.cpp: In function 'int main()':
tracks.cpp:20:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&h,&w);
     ~~~~~^~~~~~~~~~~~~~
tracks.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s",grid[i]);
         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...