제출 #63724

#제출 시각아이디문제언어결과실행 시간메모리
63724Bodo171Tracks in the Snow (BOI13_tracks)C++14
86.88 / 100
2070 ms108820 KiB
#include <iostream> #include <fstream> #include <queue> using namespace std; const int nmax=4005; int d[nmax][nmax]; //pair<int,int> q[2][nmax*nmax]; string s[nmax]; int p[2],u[2]; bool E[nmax][nmax]; int use,mx,i,j,dd,n,m,li,ci,lf,cf,di; int d1[]={-1,0,1,0}; int d2[]={0,-1,0,1}; void dij(int L,int C) { queue< pair<int,int> > q[2]; q[0].push({L,C}); for(i=1;i<=n;i++) for(j=1;j<=m;j++) d[i][j]=n*m+1; d[L][C]=0; for(i=0;i<=n*m;i++) { if(q[use].empty()) return; mx=max(mx,i); while(!q[use].empty()) { li=q[use].front().first;ci=q[use].front().second;q[use].pop(); for(di=0;di<4;di++) { lf=li+d1[di];cf=ci+d2[di]; if(lf>=1&&cf>=1&&lf<=n&&cf<=m&&(s[lf][cf-1]=='R'||s[lf][cf-1]=='F')) { dd=d[li][ci]+(s[li][ci-1]!=s[lf][cf-1]); if(dd<d[lf][cf]) { d[lf][cf]=dd; q[(dd&1)].push({lf,cf}); } } } } p[use]=1;u[use]=0; use=1-use; } } int main() { // freopen("data.in","r",stdin); cin>>n>>m;getline(cin,s[0]); for(i=1;i<=n;i++) { getline(cin,s[i]); } dij(1,1); cout<<mx+1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...