输出求助!!!
查看原帖
输出求助!!!
311110
_djc_楼主2022/4/9 18:35

本人思路是建图求最长链,然后输出其长度和本身所储存的数,但问题是,咋输出呢?

#include<bits/stdc++.h>
using namespace std;
long long a[100005],b[10005];
int n,as;
struct node{
	int next,to;
};
int vis[100005],flag[100005];
vector<int> v[100005],v2[100005];
int dfs(int x){
	if(vis[x]) return vis[x];
	for(int i=0;i<v[x].size();i++){
		vis[x]=max(vis[x],dfs(v[x][i]));
	}
		
	vis[x]++;
	return vis[x];
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n;i++){
		if(a[i]%3==0){
			int j=lower_bound(a,a+n,a[i]/3)-a;
			if(a[j]*3==a[i]){
				v[i].push_back(j);
				v2[j].push_back(i);
			}
		}
		int j0=lower_bound(a,a+n,a[i]*2)-a;
		if(a[j0]==a[i]*2){
			v[i].push_back(j0);
			v2[j0].push_back(i);//一开始打算建反图输出,然后就不会了
		}

	}
//	for(int i=0;i<n;i++){
//		for(int j=0;j<v2[i].size();j++)
//			cout<<a[i]<<"-->"<<a[v2[i][j]]<<" ";
//		cout<<endl;
//	}
	for(int i=0;i<n;i++) as=max(as,dfs(i));	
	cout<<as<<endl;
	cout<<flag[as];
}
2022/4/9 18:35
加载中...