WHY?
查看原帖
WHY?
390568
Twistzz__楼主2024/9/13 18:55

我感觉和他们纯dp的差不多啊

就是没有初始化,虽然不太懂为啥要

就是反向建,然后dp[i]=max(dp[i],dp[p[i][j]]+1)

j from 0 to p[i].size()-1

#include<bits/stdc++.h>
#define Max 100006
using namespace std;
int n,m,a,b,dp[Max];
vector<int> q[Max];
inline int read(){
	char ch=getchar();
	int x=0,f=1;
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+(ch^48);
		ch=getchar();
	}
	return x*f;
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		a=read(),b=read();
		q[b].push_back(a);
	}
	for(int i=1;i<=n;i++){
		dp[i]=1;
		for(int j=0;j<q[i].size();j++)dp[i]=max(dp[i],dp[q[i][j]]+1);
		cout<<dp[i]<<endl;
	}
	return 0;
}
2024/9/13 18:55
加载中...