P1653 [USACO04DEC] Cow Ski Area G

:::行列关系 反复 检查
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------debug\n"); using namespace std; const int maxn=1e6+10; int head[maxn],to[maxn<<1],nxt[maxn<<1],tot; int dfn[maxn],low[maxn],dfstm,st[maxn],top,co[maxn],col; int a[510][510],rd[maxn],cd[maxn]; int w,l,ans1,ans2; void add(int u,int v){ to[++tot]=v,nxt[tot]=head[u],head[u]=tot; } void lianjie(int x,int y,int u,int v){ if(x<1||x>l||u<1||u>l||y<1||y>w||v<1||v>w) return; if(a[x][y]<a[u][v]) return; add((x-1)*w+y,(u-1)*w+v); } void tarjan(int u) { dfn[u]=low[u]=++dfstm;st[++top]=u; for(int i=head[u];i;i=nxt[i]) { int v=to[i]; if(dfn[v]==0){ tarjan(v); low[u]=min(low[u],low[v]); } else if(co[v]==0) low[u]=min(low[u],dfn[v]); } if(low[u]==dfn[u]) { co[u]=++col; while(st[top]!=u) { co[st[top]]=col; top--; } top--; } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>w>>l; for(int i=1;i<=l;i++){ for(int j=1;j<=w;j++) cin>>a[i][j]; } for(int i=1;i<=l;i++){//l hang w lie for(int j=1;j<=w;j++){ lianjie(i,j,i,j-1);//i-> 1~l lianjie(i,j,i+1,j); lianjie(i,j,i,j+1); lianjie(i,j,i-1,j); } } for(int i=1;i<=w*l;i++) if(dfn[i]==0) tarjan(i); if(col==1){ cout<<"0"<<'\n';return 0; } for(int i=1;i<=w*l;i++){ for(int j=head[i];j;j=nxt[j]){ int v=to[j]; if(co[v]!=co[i]) rd[co[v]]++,cd[co[i]]++; } } for(int i=1;i<=col;i++){ if(rd[i]==0) ans1++; if(cd[i]==0) ans2++; } cout<<max(ans1,ans2)<<'\n'; return 0; }

浙公网安备 33010602011771号