Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35863 | A21μΘ_wjy | 【S】T3 | C++ | 通过 | 100 | 529 MS | 564 KB | 1731 | 2025-01-05 21:32:27 |
#include<bits/stdc++.h> #define int long long #define PII pair<int,int> #define fir first #define sec second using namespace std; int n,m; const int N=55; const int INF=1e12; int mp[N][N]; struct Edge{ int v,w; Edge(int _v=0,int _w=0){v=_v,w=_w;} }; vector<Edge> E[N*N]; inline int MP(int x,int y){ return (x-1)*m+y; } int Dis[N*N]; bool vis[N*N]; inline int Dij(int s){ priority_queue<PII,vector<PII>,greater<PII> > q; for(int i=1;i<=n*m;i++)Dis[i]=INF,vis[i]=0; Dis[s]=1; q.push(PII(0,s)); while(!q.empty()){ int u=q.top().sec; q.pop(); if(vis[u])continue; vis[u]=1; for(Edge e:E[u]){ int v=e.v,w=e.w; if(Dis[v]>Dis[u]+w){ Dis[v]=Dis[u]+w; q.push(PII(Dis[v],v)); } } } int ret=0; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j])ret=max(ret,Dis[MP(i,j)]); return ret; } signed main(){ #ifndef ONLINE_JUDGE freopen("light.in","r",stdin); freopen("light.out","w",stdout); #endif cin>>n>>m; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){ char t; cin>>t; mp[i][j]=t-'0'; } for(int i=1;i<=n;i++){ for(int j=1;j<m;j++){ E[MP(i,j)].push_back(Edge(MP(i,j+1),mp[i][j]!=mp[i][j+1])); E[MP(i,j+1)].push_back(Edge(MP(i,j),mp[i][j]!=mp[i][j+1])); } } for(int i=1;i<n;i++){ for(int j=1;j<=m;j++){ E[MP(i+1,j)].push_back(Edge(MP(i,j),mp[i][j]!=mp[i+1][j])); E[MP(i,j)].push_back(Edge(MP(i+1,j),mp[i][j]!=mp[i+1][j])); } } int Min=1e9; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)Min=min(Min,Dij(MP(i,j))); } cout<<Min<<endl; return 0; }