社区讨论

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 条回复,欢迎继续交流。

正在加载回复...