提交时间:2024-03-03 20:06:51

运行 ID: 134972

#include<bits/stdc++.h> using namespace std; struct N{int x,c;}f[505]; int n,m,a[505][505],ans=0,xx[]={0,0,-1,1},yy[]={-1,1,0,0},g=0; bool p[505][505],l=1; bool cmp(N a1,N a2){return a1.x>a2.x;} void dfs(int x,int y){ p[x][y]=1,g++; for(int i=0;i<4;i++){ int nx=xx[i]+x,ny=yy[i]+y; if(nx<1||ny<1||nx>n||ny>m||a[nx][ny]>=a[x][y]||p[nx][ny]) continue; dfs(nx,ny); } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=m;i++) f[i]=(N){a[1][i],i}; sort(f+1,f+m+1,cmp); for(int i=1;i<=m;i++){ if(!p[1][f[i].c]) dfs(1,f[i].c),ans++; if(g==n*m) break; } if(g==n*m) cout<<"1\n"<<ans; else cout<<"0\n"<<n*m-g; return 0; }