求助,一个点MLE
  • 板块灌水区
  • 楼主Targanzqq
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/25 17:12
  • 上次更新2024/6/25 17:19:08
查看原帖
求助,一个点MLE
555617
Targanzqq楼主2024/6/25 17:12

link

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,a[100001],f[100001],vis[100001],top=0;
map<int,vector<int> > mp;
vector<int> t[100001];

void dfs(int now,int fa){
	f[now]=0;
	vis[now]=1;
	for(auto i:t[now]){
		if(i==fa)continue;
		if(!vis[i])dfs(i,now);
		f[now]=max(f[now],f[i]);
	}
	f[now]++;
}

void dfs2(int now,int fa,int val){
	if(val==0)return;
	for(auto i:t[now]){
		if(i==fa)continue;
		if(f[i]==val){
			cout<<a[i]<<" ";
			dfs2(i,now,val-1);
			return;
		}
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++){
	    cin>>a[i];
	    mp[a[i]].push_back(i);
	}
	for(int i=1;i<=n;i++){
		for(auto j:mp[2*a[i]]){
			t[i].push_back(j);
		}
		if(a[i]%3==0){
			for(auto j:mp[a[i]/3]){
				t[i].push_back(j);
			}
		}
	}
	for(int i=1;i<=n;i++){
		t[n+1].push_back(i);
	}
	dfs(n+1,0);
	int maxn=f[n+1]-1;
	cout<<maxn<<endl;
	dfs2(n+1,0,maxn);
}

2024/6/25 17:12
加载中...