QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#438334 | #5476. Remodeling the Dungeon | grass8cow# | ML | 8ms | 40468kb | C++17 | 1.4kb | 2024-06-10 15:58:29 | 2024-06-10 15:58:29 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
int n,m,N,id[1010][1010];
vector<int>g[1010000];
char c[2010];
#define pb push_back
int d1[1010000],dn[1010000];
void ad(int x,int y){
g[x].pb(y),g[y].pb(x);
}
int f1[1001000];
bool in[1010000];
int rk[1001000];
bool typ;
void dfs1(int x,int d){
(typ?dn[x]:d1[x])=d;
for(int v:g[x])if(f1[x]!=v)
f1[v]=x,dfs1(v,d+1);
}
int A;
void dfs(int x){
rk[x]=A;
for(int v:g[x])if(!rk[v]&&!in[v])dfs(v);
}
int ans;
void tr(int u,int v){
if(rk[u]==rk[v])return;if(rk[u]>rk[v])swap(u,v);
ans=max(ans,d1[u]+dn[v]+1);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)id[i][j]=++N;
for(int i=1;i<=n*2+1;i++){
scanf("%s",c+1);
if(i&1){
if(i==1||i==n*2+1)continue;
int h=i/2;
for(int j=1;j<=m;j++)if(c[j*2]=='.')ad(id[h][j],id[h+1][j]);
}
else{
int h=i/2;
for(int j=1;j<m;j++)if(c[j*2+1]=='.')ad(id[h][j],id[h][j+1]);
}
}
typ=0,dfs1(1,0),memset(f1,0,sizeof(f1)),typ=1,dfs1(N,0);
vector<int>xx;
int u=1;while(u)xx.push_back(u),in[u]=1,u=f1[u];
for(A=0;A<xx.size();A++)dfs(xx[A]);
for(int i=1;i<=n;i++)for(int j=1;j<m;j++)tr(id[i][j],id[i][j+1]);
for(int i=1;i<n;i++)for(int j=1;j<=m;j++)tr(id[i][j],id[i+1][j]);
printf("%d\n",ans+1);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 6ms
memory: 40468kb
input:
2 3 +-+-+-+ |.....| +.+.+.+ |.|.|.| +-+-+-+
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 8ms
memory: 35816kb
input:
2 3 +-+-+-+ |...|.| +.+.+.+ |.|...| +-+-+-+
output:
4
result:
ok single line: '4'
Test #3:
score: 0
Accepted
time: 4ms
memory: 38252kb
input:
5 5 +-+-+-+-+-+ |...|...|.| +-+.+.+.+.+ |...|.|.|.| +.+.+.+-+.+ |.|...|.|.| +.+.+-+.+.+ |.|.....|.| +-+.+.+-+.+ |...|.....| +-+-+-+-+-+
output:
15
result:
ok single line: '15'
Test #4:
score: -100
Memory Limit Exceeded
input:
500 500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...