社区讨论
30分,求调
P10287[GESP样题 七级] 最长不下降子序列参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjbampm
- 此快照首次捕获于
- 2025/11/03 23:45 4 个月前
- 此快照最后确认于
- 2025/11/03 23:45 4 个月前
提交记录:https://www.luogu.com.cn/record/233624382
代码:
CPP#include <bits/stdc++.h>
using namespace std;
int n,m,a[100005],rudu[100005],dp[100005][11],maxn;
vector<int> g[100005];
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
rudu[v]++;
g[u].push_back(v);
}
queue<int> q;
for(int i=1;i<=n;i++){
if(rudu[i]==0)q.push(i);
dp[i][a[i]]=1;
}
while(!q.empty()){
int u=q.front();q.pop();
for(int i=0;i<g[u].size();i++){
for(int j=1;j<=10;j++)dp[g[u][i]][j]=max(dp[g[u][i]][j],dp[u][j]);
if(--rudu[g[u][i]]==0){
for(int k=a[g[u][i]];k>=1;k--) {
dp[g[u][i]][a[g[u][i]]]=max(dp[g[u][i]][a[g[u][i]]],dp[g[u][i]][k]+1);
}
q.push(g[u][i]);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=10;j++){
// cout<<dp[i][j]<<" ";
maxn=max(maxn,dp[i][j]);
}
// cout<<endl;
}
cout<<maxn;
return 0;
}
本鸡看不出问题Π_Π
回复
共 1 条回复,欢迎继续交流。
正在加载回复...