尽平生所学,仍然90分,TLE了一个点
查看原帖
尽平生所学,仍然90分,TLE了一个点
658786
STUDENT00楼主2022/9/9 22:56

代码很好理解的(玖玖的代码):

#include<bits/stdc++.h>
using namespace std;
int n,m,num[100010],x,y,dp[100010],p,vis[100010];
vector<int> a[100010]; 
int dfs(int k){
	if(dp[k]) return dp[k];
	int maxs=0;
	for(int i=0;i<num[k];i++){
		if(vis[a[k][i]]!=p){
			vis[a[k][i]]=p;
			maxs=max(maxs,dfs(a[k][i]));
		}
	}
	return max(maxs,k);
}
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		scanf("%d%d",&x,&y);
		num[x]++;
		a[x].push_back(y);
	}
	for(int i=n;i>=1;i--){
	    vis[i]=++p;
		dp[i]=dfs(i);
	}
	for(int i=1;i<=n;i++) printf("%d ",dp[i]);
	return 0;
}
2022/9/9 22:56
加载中...