关于测试点3~7链部分 too short on line 1的问题
查看原帖
关于测试点3~7链部分 too short on line 1的问题
547446
Nevergonna_CCF楼主2022/10/2 12:45

link

专门打这个部分部分分的

代码如下:

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

int T,n;
int num[2500];
int num2[2500];
vector<int> B[2500];
int D[2500];
int a[2500];

namespace P3_7{
    //挂
    void dfs(int s, int e, int len){
        //cout<<s<<" "<<e<<" "<<len<<endl;
        //for(int i = 1; i<=n; i++){
        //        cout<<a[i]<<' ';
        //    }
        //    cout<<endl;
        if(len==0) {
            for(int i = 1; i<=n; i++){
                cout<<a[i]<<' ';
            }
            cout<<'\n';
            return;
        }
        int minn=a[s],mini=s;
        for(int i = s; i<=e; i++){
            if(a[i]<minn) minn=a[i],mini=i;
        }
        swap(a[mini],a[s-1]);
        for(int i = mini; i>s; i--){
            swap(a[i],a[i-1]);
        }
        dfs(mini+1,e,e-mini);
    }
    void Main(){
        dfs(2,n,n);
        return ;
    }
}

inline bool judge_37(){
    if((D[num[1]]^1)||(D[num[n]]^1)) return false;
    for(int i = 2; i<n; i++){
        if(D[num[i]]^2) return false;
    }
    //cout<<1111111111111111111;
    return true;
}

int main(){
    ios::sync_with_stdio(false);
    cin>>T;
    while(T--){
        cin>>n;
        for(int i = 1; i<=n; i++) B[i].clear();
        memset(num,0,sizeof(num));
        memset(num2,0,sizeof(num2));
        memset(a,0,sizeof(a));
        memset(D,0,sizeof(D));
        for(int i = 1; i<=n; i++){
            cin>>num[i];
            //if(num[i]==3) cout<<i<<endl;
            num2[num[i]]=i;
        }
        for(int i = 1; i<=n; i++) a[i]=num[i];
        for(int i = 1; i<n; i++){
            int x,y;
            cin>>x>>y;
            B[x].push_back(y);
            B[y].push_back(x);
            D[x]++;
            D[y]++;
        }
        //for(int i = 1; i<=n; i++){
        //    cout<<num2[i]<<" ";
        //}
        if(judge_37()){
            P3_7::Main();
        }
    }
    return 0;
}

2022/10/2 12:45
加载中...