问题标题: B4173WA20分代码

0
1
已解决
谈睿
谈睿
新手天翼
新手天翼

此贴

#include<bits/stdc++.h>
#define ing long long
using namespace std;
struct node{
	int l,r;
}a[100005];
int T,n,u,v;
int f[100005],cnt;
int pos[100005];
int min_f[100005];
int size[100005];
int dfs(int root){
	if(root==0) return 0;
	f[++cnt]=root;
	pos[root]=cnt;
	return size[root]=dfs(a[root].l)+dfs(a[root].r)+1;
}
signed main(){
	cin>>T;
	while(T--){
        bool flag=1;
        cnt=0;
        memset(f,0,sizeof(f));
        memset(min_f,0,sizeof(min_f));
        memset(pos,0,sizeof(pos));
        memset(size,0,sizeof(size));
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i].l>>a[i].r; 
		}
		dfs(1);
		min_f[n+1]=0x3f3f3f3f;
		for(int i=n;i>=1;i--) min_f[i]=min(min_f[i+1],f[i]);
        int t=0;
		for(int i=1;i<=n;i++){
			if(a[f[i]].r&&a[f[i]].l>a[f[i]].r){
				int tmp=0;
				for(int j=pos[a[f[i]].r];j<=n;j++){
					if(!a[f[j]].l){
						if(tmp&&f[j]>a[f[i]].l){
							break;
						}
						tmp=j;
					}
				}
                if(tmp!=0){
                	for(int j=1;j<=i;j++) cout<<f[j]<<" ";
    				for(int j=pos[a[f[i]].r];j<=tmp;j++) cout<<f[j]<<" ";
    				for(int j=pos[a[f[i]].l];j<pos[a[f[i]].r];j++) cout<<f[j]<<" ";
    				for(int j=tmp+1;j<=n;j++) cout<<f[j]<<" ";
                    flag=0;
    				break;    
                }

			}else if(!a[f[i]].l&&f[i+1]>min_f[i+1]){
                if(f[i+size[f[i+1]]+1]!=min_f[i+1]){
    				for(int j=1;j<=i;j++) cout<<f[j]<<" ";
    				for(int j=pos[min_f[i+1]];j<pos[min_f[i+1]]+size[min_f[i+1]];j++) cout<<f[j]<<" ";
    				for(int j=i+1;j<pos[min_f[i+1]];j++) cout<<f[j]<<" ";
    				for(int j=pos[min_f[i+1]]+size[min_f[i+1]];j<=n;j++) cout<<f[j]<<" ";
                    flag=0;
                    break;    
                }else{
                    int tmp=0;
    				for(int j=i+size[f[i+1]]+1;j<=n;j++){
    					if(!a[f[j]].l){
    						if(tmp&&f[j]>f[i+1]){
    							break;
    						}
    						tmp=j;
    					}
    				}
                    if(tmp!=0){
                    	for(int j=1;j<=i;j++) cout<<f[j]<<" ";
        				for(int j=i+size[f[i+1]]+1;j<=tmp;j++) cout<<f[j]<<" ";
        				for(int j=i+1;j<=i+size[f[i+1]];j++) cout<<f[j]<<" ";
        				for(int j=tmp+1;j<=n;j++) cout<<f[j]<<" ";
                        flag=0;
        				break;    
                    }
                }
			}else if(!a[f[i]].r&&a[f[i]].l){
                if(a[f[i]].l>f[i+size[a[f[i]].l]+1]){
                    int tmp=0;
    				for(int j=i+size[a[f[i]].l]+1;j<=n;j++){
    					if(!a[f[j]].l){
    						if(tmp&&f[j]>a[f[i]].l){
    							break;
    						}
    						tmp=j;
    					}
    				}
                    if(tmp!=0){
        				for(int j=1;j<=i;j++) cout<<f[j]<<" ";
        				for(int j=pos[a[f[i]].l]+size[a[f[i]].l];j<=tmp;j++) cout<<f[j]<<" ";
        				for(int j=pos[a[f[i]].l];j<pos[a[f[i]].l]+size[a[f[i]].l];j++) cout<<f[j]<<" ";
        				for(int j=tmp+1;j<=n;j++) cout<<f[j]<<" ";
                        flag=0;
                        break;             
                    }

                }
            }
		}
        if(flag) for(int i=1;i<=n;i++) cout<<f[i]<<" ";
        cout<<endl;
	}
	return 0;
}

 

谈睿在2026-03-02 21:55:26追加了内容

采纳第3个回答的人。


0
0
0
0
我要回答