社区讨论
60pts拓扑求助
P1434[SHOI2002] 滑雪参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi4hpuef
- 此快照首次捕获于
- 2025/11/18 19:28 4 个月前
- 此快照最后确认于
- 2025/11/20 04:05 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[101][101],cnt[10001],f[10001],ans;
queue<ll>q;
vector<ll>g[10001];
ll cal(ll x,ll y){return (x-1)*m+y;}
int main(){
cin>>n>>m;
for (ll i=1;i<=n;i++) for (ll j=1;j<=m;j++) cin>>a[i][j];
for (ll i=1;i<=n;i++)
for (ll j=1;j<m;j++){
ll num1=cal(i,j),num2=num1+1;
if (a[i][j]<a[i][j+1]) g[num2].push_back(num1),cnt[num1]++;
else g[num1].push_back(num2),cnt[num2]++;
}
for (ll i=2;i<=n;i++)
for (ll j=1;j<=m;j++){
ll num1=cal(i,j),num2=num1-m;
if (a[i][j]<a[i-1][j]) g[num2].push_back(num1),cnt[num1]++;
else g[num1].push_back(num2),cnt[num2]++;
}
for (ll i=1;i<=n*m;i++) if (cnt[i]==0) q.push(i),f[i]=1;
while (q.size()){
ll cur=q.front();
q.pop();
for (ll i=0;i<g[cur].size();i++){
f[g[cur][i]]=max(f[g[cur][i]],f[cur]+1);
cnt[g[cur][i]]--;
if (cnt[g[cur][i]]==0) q.push(g[cur][i]);
}
}
for (ll i=1;i<=n*m;i++) ans=max(ans,f[i]);
cout<<ans;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...