刷题累了来水一水。
好久没水搜索了。于是本想切水题交了6次才过QAQ
讲道理这个排序真的玄学,看了hzwer大佬的博客才知道..
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
struct Node{
int x,y,w;
}a[500010];
int n,m,t,h[1200][800],ans;
int k1[8]={0,0,1,1,1,-1,-1,-1},k2[8]={1,-1,1,0,-1,1,0,-1};
bool vis[1200][800];
int cmp(Node x,Node y){
return x.w>y.w;
}
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<8;i++){
int xx=x+k1[i],yy=y+k2[i];
if(xx<1||yy<1||xx>n||yy>m) continue;
if(!vis[xx][yy]&&h[xx][yy]<=h[x][y]) dfs(xx,yy);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>h[i][j];
t++;
a[t].x=i; a[t].y=j; a[t].w=h[i][j];
}
}
sort(a+1,a+t+1,cmp);
for(int i=1;i<=t;i++){
if(!vis[a[i].x][a[i].y]){
dfs(a[i].x,a[i].y);
ans++;
}
}
cout<<ans;
}